TakeWhile,至少n个元素

4

似乎没有e.TakeWhile(predicate, atLeastNElements)重载。有没有方便的方法来表达TakeWhile,但是如果有>= N个元素可用,则至少取出N个元素。

编辑:我脑海中想到的最好方法是在TakeWhile的谓词中捕获一个整数,并在每次调用时将其减去1,同时返回true。只有计数器降至0后才使用实际谓词。


一般化问题到N个元素,勾勒出我的解决方案思路。 - D.R.
1个回答

5
您可以使用带有当前元素索引的重载TakeWhile
var e = new [] { 1, 2, 3, 4, 5 };
var n = 3; // at least n
e.TakeWhile((element, index) => index < n || predicate(element));

2
你是指 < 3(即索引0、1和2),而且你把lambda表达式的参数顺序搞错了 - 应该是(value, index) - 但是没错,基本上就是这样做。 - Jon Skeet
1
我进一步改善了答案。 - D.R.
不,你要么让索引小于n,要么让谓词为真。 - Kvam
1
@AlexM,不,这不会占用至少n个元素。 - D.R.
但是,即使谓词对它们为假且有足够的正项,这将获取第一项,不是吗? - Tamir Vered
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接