在c# 4中,将数组分组为包含n个元素的数组列表的最佳方式是什么?
E.g
string[] testArray = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8" };
如果我们取n=3的话应该分成两部分。
string[] A1 = {"s1", "s2", "s3"};
string[] A2 = {"s4", "s5", "s6"};
string[] A3 = {"s7", "s8"};
可能是一种使用LINQ的简单方法?
发布于 2010-08-19 01:21:54
这将生成一个包含3个元素的字符串数组:
int i = 0;
var query = from s in testArray
let num = i++
group s by num / 3 into g
select g.ToArray();
var results = query.ToArray();
发布于 2010-08-19 01:21:33
我不认为有一个很好的内置方法来解决这个问题,但是你可以像下面这样写一个。
public static IEnumerable<IEnumerable<T>> GroupInto<T>(
this IEnumerable<T> source,
int count) {
using ( var e = source.GetEnumerator() ) {
while ( e.MoveNext() ) {
yield return GroupIntoHelper(e, count);
}
}
}
private static IEnumerable<T> GroupIntoHelper<T>(
IEnumerator<T> e,
int count) {
do {
yield return e.Current;
count--;
} while ( count > 0 && e.MoveNext());
}
发布于 2010-08-19 07:26:22
int size = 3;
var results = testArray.Select((x, i) => new { Key = i / size, Value = x })
.GroupBy(x => x.Key, x => x.Value, (k, g) => g.ToArray())
.ToArray();
如果您不介意将结果类型化为IEnumerable<IEnumerable<T>>
而不是T[][]
,那么您可以完全省略ToArray
调用:
int size = 3;
var results = testArray.Select((x, i) => new { Key = i / size, Value = x })
.GroupBy(x => x.Key, x => x.Value);
https://stackoverflow.com/questions/3514740
复制相似问题