TakeWhile,至少n个元素

D.R*_*.R. 4 c# linq

似乎没有e.TakeWhile(predicate, atLeastNElements)超载。有没有一种方便的方法来表达,但是,如果有可用的元素,则TakeWhile至少采用元素。N>= N?

编辑:我脑子里想到的最好办法是捕获 int 的TakeWhile谓词并在返回时将其减少 1 true。仅当计数器减至零后才使用实际谓词。

Kva*_*vam 5

TakeWhile您可以对当前元素的索引使用重载:

var e = new [] { 1, 2, 3, 4, 5 };
var n = 3; // at least n
e.TakeWhile((element, index) => index < n || predicate(element));
Run Code Online (Sandbox Code Playgroud)

  • 您的意思是“&lt; 3”(即索引 0、1 和 2),并且您的 lambda 表达式参数的方向是错误的 - 它应该是“(value, index)” - 但是,是的,这基本上就是要走的路。 (2认同)