c# - 从可枚举中获取下一个 N 个元素

标签 c# .net linq enumerator

上下文: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 个的解决方案。

最佳答案

SkipTake对你有用吗?

在循环中结合使用两者以获得您想要的结果。

所以,

list.Skip(10).Take(10);

跳过前 10 条记录,然后取下 10 条记录。

关于c# - 从可枚举中获取下一个 N 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524415/

相关文章:

c# - 使用实时流的语音识别

c# - Entity Framework 4.3 不创建数据库

linq - Entity Framework 4 - 加入 2 个表然后对它们进行分页的语法是什么?

c# - 如何将 System.Type 解析为 System.Data.DbType?

c# - BrowseForFolder 对话框 : center and make TopMost

c# - 如何知道表单是否显示为对话框

.net - 在 .NET 中使用 DataColumn.Expression 属性的嵌套 IF 语句

c# - 如何删除Windows窗体应用程序中的标题栏

c# - LINQ to Entities 无法识别该方法并且无法将此方法转换为存储表达式

c# - Math.Round() - LINQ 查询