上下文:C# 3.0,.Net 3.5
假设我有一个生成随机数的方法(永远):
private static IEnumerable<int> RandomNumberGenerator() {
while (true) yield return GenerateRandomNumber(0, 100);
}
我需要将这些数字分成 10 个一组,所以我想要类似的东西:
foreach (IEnumerable<int> group in RandomNumberGenerator().Slice(10)) {
Assert.That(group.Count() == 10);
}
我已经定义了 Slice 方法,但我觉得应该已经定义了一个。这是我的 Slice 方法,仅供参考:
private static IEnumerable<T[]> Slice<T>(IEnumerable<T> enumerable, int size) {
var result = new List<T>(size);
foreach (var item in enumerable) {
result.Add(item);
if (result.Count == size) {
yield return result.ToArray();
result.Clear();
}
}
}
问题:有没有更简单的方法来完成我想要做的事情?也许是林克?
注意:上面的例子是一个简化,在我的程序中我有一个迭代器,它以非线性方式扫描给定的矩阵。
编辑:为什么Skip
+Take
不好。
实际上我想要的是:
var group1 = RandomNumberGenerator().Skip(0).Take(10);
var group2 = RandomNumberGenerator().Skip(10).Take(10);
var group3 = RandomNumberGenerator().Skip(20).Take(10);
var group4 = RandomNumberGenerator().Skip(30).Take(10);
无需重新生成 (10+20+30+40) 次的开销。我需要一个能够准确生成 40 个数字并将 4 组中的数字除以 10 的解决方案。