gpt4 book ai didi

c# - 与生成器和序列相关的有趣事情

转载 作者:行者123 更新时间:2023-11-30 12:52:39 25 4
gpt4 key购买 nike

当您想逐个序列地提取序列时,是否还有其他人觉得迭代器不够用?

也许我应该开始用 F# 编写代码(顺便说一句,任何人都知道 F# 是否使用惰性求值),但我发现自己想要一种以非常独特的方式提取序列的方法。

例如

// string.Split implemented as a generator, with lazy evaluation
var it = "a,b,c".GetSplit(',').GetEnumerator();
it.MoveNext();
var a = it.Current;
it.MoveNext();
it.MoveNext();
var c = it.Current;

那行得通,但我不喜欢它,它太丑了。那我可以这样做吗?

var it = "a,b,c".GetSplit(',');
string a;
var c = it.Yield(out a).Skip(1).First();

这样更好。但我想知道是否有另一种概括相同语义的方法,也许这就足够了。通常我正在做一些嵌入式字符串解析,这就是弹出的时候。

还有一种情况是,我希望使用一个序列到特定点,然后基本上, fork 它(或克隆它,这样更好)。像这样

var s = "abc";
IEnumerable<string> a;
var b = s.Skip(1).Fork(out a);
var s2 = new string(a.ToArray()); // "bc"
var s3 = new string(b.ToArray()); // "bc"

最后一个,一开始可能没那么有用,我发现它可以很方便地解决回溯问题。

我的问题是我们需要这个吗?还是它已经以某种方式存在而我只是错过了它?

最佳答案

序列基本上可以正常工作,即提供一个简单的接口(interface),按需产生值流。如果您有更复杂的需求,欢迎您使用更强大的界面。

例如,您的字符串示例看起来可以作为解析器编写:也就是说,一个函数使用流中的字符序列并使用内部状态来跟踪它在流中的位置。

关于c# - 与生成器和序列相关的有趣事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4133115/

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