2015-05-14 3 views
0

У меня есть программа, которая будет считывать содержимое файла в какой-то список или массив. Этот список/массив может содержать любое количество элементов. Мне нужно разбить его на более мелкие группы, например, по 50 пунктов, а затем выполнить некоторую обработку по каждому элементу в каждой группе.Разбиение списка или коллекции на куски

List<string> stuffFromFile = new List<string>(); 

while ((line = fileReader.ReadLine()) != null) 
     { 
      stuffFromFile.Add(line); 
     } 

Я просматривал некоторые примеры в Интернете о том, как кусок вещи, но если честно, я не очень понимаю, примеры и некоторые из них кажутся слишком сложными. Мне просто нужно что-то простое, которое будет разбивать/разбивать/разбивать исходный список элементов на группы по 50, а затем разрешать мне перебирать каждый элемент в каждой группе до завершения обработки.

Общее количество прочитанных элементов, скорее всего, не будет числом, которое я могу разделить равномерно на 50, поэтому, скорее всего, последняя группа может содержать менее 50 наименований, но все равно ее нужно будет обрабатывать так же, как и остальные.

Может кто поможет здесь? Похоже, это должно быть просто, но я действительно не знаю, как это сделать. Я видел пример использования LINQ, но я тоже этого не понимаю.

+0

Я думаю, что это может быть то, что вы ищете: http://stackoverflow.com/questions/11463734/split-a-list -into-less-list-of-n-size –

+0

Что не так, просто прочитав 50, процесс, повторите? – Paparazzi

+0

Почему вы хотите разбить на группы, когда конечной целью является обработка каждого элемента? – imlokesh

ответ

7

Это метод расширения, который будет работать с любым списком и кусками любого размера.

public static List<List<T>> SplitList<T>(this List<T> me, int size = 50) 
{ 
    var list = new List<List<T>>(); 
    for (int i = 0; i < me.Count; i += size) 
     list.Add(me.GetRange(i, Math.Min(size, me.Count - i))); 
    return list; 
} 

Используйте это так:

List<List<string>> chunksOf50 = stuffFromFile.SplitList(); 
+0

Как перебирать каждый элемент в списке chunksOf50? – irldev

+0

@irldev 'foreach (Список chunk in chunksOf50)' – Zer0

+0

для вас, что-то простое, как вложенные петли foreach. 'foreach (Список listOfStrings в chunksOf50) {foreach (строка chunk в listOfStrings) {// do stuff}};' –

1
List<string> stuffFromFile = new List<string>() { "1", "2", "3", "4" }; //contents 

while (stuffFromFile.Count > 0) 
{ 
    List<string> newChunk = stuffFromFile.Take(50).ToList(); //Take up to 50 elements 
    stuffFromFile.RemoveRange(0, newChunk.Count); // Remove the elements you took 
} 
Смежные вопросы