下午好,
我需要将一个数组分成更小的“块”。
我传递了大约1200个条目,需要将它们拆分成更容易处理的数组,每个数组包含100个条目,然后我需要处理这些条目。
有没有人能提点建议?
发布于 2012-06-26 21:08:45
您可以使用LINQ
按块大小对所有项进行分组,然后创建新的数组。
// build sample data with 1200 Strings
string[] items = Enumerable.Range(1, 1200).Select(i => "Item" + i).ToArray();
// split on groups with each 100 items
String[][] chunks = items
.Select((s, i) => new { Value = s, Index = i })
.GroupBy(x => x.Index / 100)
.Select(grp => grp.Select(x => x.Value).ToArray())
.ToArray();
for (int i = 0; i < chunks.Length; i++)
{
foreach (var item in chunks[i])
Console.WriteLine("chunk:{0} {1}", i, item);
}
注意,不需要创建新的数组(需要cpu周期和内存)。如果省略了这两个ToArrays
,也可以使用IEnumerable<IEnumerable<String>>
。
下面是运行代码:http://ideone.com/K7Hn2
发布于 2015-05-22 15:59:55
here我找到了另一个linq解决方案:
int[] source = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
int chunkSize = 3;
int[][] result = source.GroupBy(s => i++ / chunkSize).Select(g => g.ToArray()).ToArray();
//result = [1,2,3][4,5,6][7,8,9]
发布于 2012-06-26 20:41:10
您可以使用Skip()
和Take()
string[] items = new string[]{ "a", "b", "c"};
string[] chunk = items.Skip(1).Take(1).ToArray();
https://stackoverflow.com/questions/11207526
复制相似问题