gpt4 book ai didi

c# - 如何生成枚举器的枚举器

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:29 25 4
gpt4 key购买 nike

我正在学习 DotNet。我可以轻松地在 Python 上的迭代器上生成迭代器,但在 C# 中执行此操作的规范方法是什么?我创建函数 Slices(未测试,可能有错误)但对我来说看起来危险的是创建段(使用 new):如果输入序列非常大,那么很多将创建新的分割市场。我这样做是因为:1) 段允许保持切片的大小 - 它可以在最后一个切片中被切割 2) 我不知道是否有可能产生枚举器.

另一种方法可能是只创建一个段并在每次迭代时重新初始化它,但是 ArraySegment 似乎不支持这样的事情(因此,段可能需要自定义结构)。

public static IEnumerable<ArraySegment<T>> Slices<T>(IEnumerable<T> sequence, int sliceSize) {
T[] slice = new T[sliceSize];
IEnumerator<T> items = sequence.GetEnumerator();
int from = 0, to;
while (true) {
for (to = from; to < from + sliceSize && items.MoveNext(); to++) {
slice[from - to] = items.Current;
}
from = to;
yield return new ArraySegment<T>(slice, from, to - from);
}
}

那么,在 C# 中生成迭代器的迭代器的正确或/和规范方法是什么(在切片、组等中需要)

最佳答案

返回IEnumerator<T>没有错使用 yield :

public static IEnumerable<IEnumerable<T>> 
Slice<T>(this IEnumerable<T> sequence, int sliceSize)
{
while(sequence.Any())
{
yield return sequence.Take(sliceSize);
sequence = sequence.Skip(sliceSize);
}
}

关于c# - 如何生成枚举器的枚举器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50007467/

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