gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:33:45 31 4
gpt4 key购买 nike

上下文: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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com