上下文: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 方法,但我觉得应该已经定义了一个。这是我的切片方法,仅供引用:
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();
}
}
}
问题:有没有更简单的方法来完成我想做的事情?也许是 Linq?
注意:上面的例子是一个简化,在我的程序中我有一个以非线性方式扫描给定矩阵的迭代器。
编辑: 为什么 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 个的解决方案。
最佳答案
关于c# - 从可枚举中获取下一个 N 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524415/