var nums = new[]{ 1, 2, 3, 4, 5, 6, 7};
var pairs = /* some linq magic here*/ ;
=>
对 = { {1, 2}, {3, 4}, {5, 6}, {7, 0} }
的要素pairs
应该是二元素列表,或者是带有两个字段的匿名类的实例,比如new {First = 1, Second = 2}
.
默认的 linq 方法都无法通过一次扫描来延迟执行此操作。压缩序列本身会进行两次扫描,并且分组并不完全是懒惰的。最好的选择是直接实现它:
public static IEnumerable<T[]> Partition<T>(this IEnumerable<T> sequence, int partitionSize) {
Contract.Requires(sequence != null)
Contract.Requires(partitionSize > 0)
var buffer = new T[partitionSize];
var n = 0;
foreach (var item in sequence) {
buffer[n] = item;
n += 1;
if (n == partitionSize) {
yield return buffer;
buffer = new T[partitionSize];
n = 0;
}
}
//partial leftovers
if (n > 0) yield return buffer;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)