将列表或集合拆分为块
Splitting a list or collection into chunks
我有一个程序可以将文件的内容读取到某种列表或数组中。此 list/array 可以包含任意数量的项目。我需要将它分成更小的组,比如每组 50 个项目,然后对每个组中的每个项目进行一些处理。
List<string> stuffFromFile = new List<string>();
while ((line = fileReader.ReadLine()) != null)
{
stuffFromFile.Add(line);
}
我一直在网上浏览一些关于如何分块的例子,但老实说,我并不真正理解这些例子,其中一些看起来过于复杂。我只需要一些简单的东西,将 chunk/split/break 原始项目列表分成 50 个组,然后让我遍历每个组中的每个项目,直到处理完成。
读入的项目总数很可能不是我可以除以 50 的数字,因此最后一组很可能包含少于 50 个项目,但仍需要像其他项目一样进行处理.
有人可以帮忙吗?听起来应该很简单,但我真的不知道该怎么做。我看过有关使用 LINQ 的示例,但我也不明白。
这是一个适用于任何列表和任何大小块的扩展方法。
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();
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
}
我有一个程序可以将文件的内容读取到某种列表或数组中。此 list/array 可以包含任意数量的项目。我需要将它分成更小的组,比如每组 50 个项目,然后对每个组中的每个项目进行一些处理。
List<string> stuffFromFile = new List<string>();
while ((line = fileReader.ReadLine()) != null)
{
stuffFromFile.Add(line);
}
我一直在网上浏览一些关于如何分块的例子,但老实说,我并不真正理解这些例子,其中一些看起来过于复杂。我只需要一些简单的东西,将 chunk/split/break 原始项目列表分成 50 个组,然后让我遍历每个组中的每个项目,直到处理完成。
读入的项目总数很可能不是我可以除以 50 的数字,因此最后一组很可能包含少于 50 个项目,但仍需要像其他项目一样进行处理.
有人可以帮忙吗?听起来应该很简单,但我真的不知道该怎么做。我看过有关使用 LINQ 的示例,但我也不明白。
这是一个适用于任何列表和任何大小块的扩展方法。
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();
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
}