[SOLVED] Как продублировать данные в списке N-раз?

jiks

Client
Регистрация
01.11.2015
Сообщения
29
Благодарностей
3
Баллы
3
Имеется список такого вида:
Код:
1.txt
.
.
.
.
10.txt
Хочу, чтобы данные в этом списке продублировались N-раз.
И все выглядело примерно так:
Код:
1.txt
.
.
.
10.txt
1.txt
.
.
.
10.txt
1.txt
.
.
.
10.txt
1.txt
....
Вариант через цикл не рассматриваю. Уверен, что есть более изящное решение
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 554
Благодарностей
10 101
Баллы
113
Имеется список такого вида:
Код:
1.txt
.
.
.
.
10.txt
Хочу, чтобы данные в этом списке продублировались N-раз.
И все выглядело примерно так:
Код:
1.txt
.
.
.
10.txt
1.txt
.
.
.
10.txt
1.txt
.
.
.
10.txt
1.txt
....
Вариант через цикл не рассматриваю. Уверен, что есть более изящное решение
Операции над списком - Копировать список в другой список, затем добавить из этого списка в конец исх. списка нужное кол-во раз (со счетчиком например).
 

jiks

Client
Регистрация
01.11.2015
Сообщения
29
Благодарностей
3
Баллы
3
Операции над списком - Копировать список в другой список, затем добавить из этого списка в конец исх. списка нужное кол-во раз (со счетчиком например).
Ну блин, это костыль. Должна же быть функция конкатенации. Если не кубиком, то в C# точно есть. Просто я не знаток C#, поэтому вот :ce:
 

sitnem

Client
Регистрация
03.12.2016
Сообщения
127
Благодарностей
82
Баллы
28
А как ты без циклов это сделаешь? На самом нижнем уровне все равно цикл будет использоваться, даже, если ты либу подходящую найдешь. Или ты имеешь ввиду, чтобы к файлу в цикле не обращаться, а только один раз? Тогда можно так:

C#:
// Путь к файлу.
string path = project.Variables["project_files_dir"].Value + "/list.txt";

string copyText = File.ReadAllText(path);
string addText = "";

for (int i = 0; i < 10; i++)
{
    addText = addText + copyText;
}

File.AppendAllText(path,addText);
 

jiks

Client
Регистрация
01.11.2015
Сообщения
29
Благодарностей
3
Баллы
3
А как ты без циклов это сделаешь? На самом нижнем уровне все равно цикл будет использоваться, даже, если ты либу подходящую найдешь. Или ты имеешь ввиду, чтобы к файлу в цикле не обращаться, а только один раз? Тогда можно так:

C#:
// Путь к файлу.
string path = project.Variables["project_files_dir"].Value + "/list.txt";

string copyText = File.ReadAllText(path);
string addText = "";

for (int i = 0; i < 10; i++)
{
    addText = addText + copyText;
}

File.AppendAllText(path,addText);
Не, у меня без файлов. Чисто список в проекте, в котором лежат названия файлов.
 

Metrix

Client
Регистрация
03.01.2014
Сообщения
342
Благодарностей
273
Баллы
63
C#:
var testList = project.Lists["testList"];
var tempList = new List<string>();
var duplicateCount = 5;
for(int i = 0; i < duplicateCount; i++)
{
    tempList.AddRange(testList);
}
testList.AddRange(tempList);
Можешь, конечно, искать более изящное решение без циклов, не зубудь тут его оставить, если найдёшь.
 

jiks

Client
Регистрация
01.11.2015
Сообщения
29
Благодарностей
3
Баллы
3
C#:
var testList = project.Lists["testList"];
var tempList = new List<string>();
var duplicateCount = 5;
for(int i = 0; i < duplicateCount; i++)
{
    tempList.AddRange(testList);
}
testList.AddRange(tempList);
Можешь, конечно, искать более изящное решение без циклов, не зубудь тут его оставить, если найдёшь.
Кароч я нашел. Но есть нюанс. Нужно положить список в переменную и добавить пустую строку в конец, чтобы не получались две строки в одной.
Хоть и не идеальное решение, но я ненавижу циклы. Так что сойдет.
C#:
var q = String.Concat(Enumerable.Repeat(project.Variables["blabla"].Value, 4));
return q;
4 - число, на которое умножаем.
 

Metrix

Client
Регистрация
03.01.2014
Сообщения
342
Благодарностей
273
Баллы
63
  • Спасибо
Реакции: sitnem

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
554
Баллы
93
Как вариант, можно через Enumerable.Repeat<Action>

C#:
List<string> temp = new List<string>();

IZennoList myList = project.Lists["List"];
myList.Clear();
myList.AddRange(new String[] {"1.txt", "2.txt", "3.txt"});

temp.AddRange(myList);

Enumerable.Repeat<Action>(() => myList.AddRange(temp),3).ToList().ForEach(f => f.Invoke());
 

jiks

Client
Регистрация
01.11.2015
Сообщения
29
Благодарностей
3
Баллы
3

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)