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

  • Автор темы Автор темы jiks
  • Дата начала Дата начала

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
....
Вариант через цикл не рассматриваю. Уверен, что есть более изящное решение
 
Имеется список такого вида:
Код:
Развернуть Свернуть Копировать
1.txt
.
.
.
.
10.txt
Хочу, чтобы данные в этом списке продублировались N-раз.
И все выглядело примерно так:
Код:
Развернуть Свернуть Копировать
1.txt
.
.
.
10.txt
1.txt
.
.
.
10.txt
1.txt
.
.
.
10.txt
1.txt
....
Вариант через цикл не рассматриваю. Уверен, что есть более изящное решение

Операции над списком - Копировать список в другой список, затем добавить из этого списка в конец исх. списка нужное кол-во раз (со счетчиком например).
 
Операции над списком - Копировать список в другой список, затем добавить из этого списка в конец исх. списка нужное кол-во раз (со счетчиком например).
Ну блин, это костыль. Должна же быть функция конкатенации. Если не кубиком, то в C# точно есть. Просто я не знаток C#, поэтому вот :ce:
 
А как ты без циклов это сделаешь? На самом нижнем уровне все равно цикл будет использоваться, даже, если ты либу подходящую найдешь. Или ты имеешь ввиду, чтобы к файлу в цикле не обращаться, а только один раз? Тогда можно так:

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);
 
А как ты без циклов это сделаешь? На самом нижнем уровне все равно цикл будет использоваться, даже, если ты либу подходящую найдешь. Или ты имеешь ввиду, чтобы к файлу в цикле не обращаться, а только один раз? Тогда можно так:

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);
Не, у меня без файлов. Чисто список в проекте, в котором лежат названия файлов.
 
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 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 - число, на которое умножаем.
 
Как вариант, можно через 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());
 

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