当您想一个部分一个序列一个部分地进行时,是否还有其他人认为迭代器不够用?
也许我应该开始用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();
那就更好了。但是我想知道是否还有其他的方法来概括相同的语义,也许这已经足够好了。通常我会做一些嵌入的字符串解析,这就是突然出现的时候。
还有一种情况,我希望消耗一个序列到一个特定的点,然后基本上,分叉它(或者克隆它,更好)。像这样
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"
最后一个,一开始可能没有那么有用,我发现它非常方便地解决了回溯问题。
我的问题是我们需要这个吗?或者它已经以某种方式存在,而我只是错过了它?