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

jiks

Client
Регистрация
01.11.2015
Сообщения
28
Благодарностей
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
Сообщения
20 407
Благодарностей
9 116
Баллы
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
Сообщения
28
Благодарностей
3
Баллы
3
Операции над списком - Копировать список в другой список, затем добавить из этого списка в конец исх. списка нужное кол-во раз (со счетчиком например).
Ну блин, это костыль. Должна же быть функция конкатенации. Если не кубиком, то в C# точно есть. Просто я не знаток C#, поэтому вот :ce:
 

sitnem

Client
Регистрация
03.12.2016
Сообщения
122
Благодарностей
78
Баллы
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
Сообщения
28
Благодарностей
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
Сообщения
343
Благодарностей
272
Баллы
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
Сообщения
28
Благодарностей
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
Сообщения
343
Благодарностей
272
Баллы
63
  • Спасибо
Реакции: sitnem

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
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
Сообщения
28
Благодарностей
3
Баллы
3

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