延迟筛选列表

  • 本文关键字:列表 筛选 延迟 c#
  • 更新时间 :
  • 英文 :


我有一个项目列表,我想从该列表中选择 3 个满足谓词的项目。

我试过这个:(示例)

list.Where(x => x == 2).Take(3)

list.Take(3).Where(x => x == 2)

但是它们当然不起作用。

是否有一种机制只选择满足谓词的元素,直到满足.Take(3)

编辑:第一个示例的问题在于它首先选择匹配的每个元素,然后采用前 3 个。我只希望它选择直到它花了 3 个。我想它只对大量收藏真正重要,但仍然如此。或者无论如何我就是这样理解的。

发生这种情况:(编辑:我错了

[1, 2, 2, 2, 3, 4, 5, 2].Where(x => x == 2) => [2, 2, 2, 2].Take(3) => [2, 2, 2]

我想要这样的东西: [1, 2, 2, 2, 3, 4, 5, 2].Where(x => x == 2, 3) => [2, 2, 2] ,其中 3 是它在停止过滤之前匹配的元素数。

我假设你还没有理解linq的延迟执行。您的第一种方法完全符合您的要求:

list.Where(x => x == 2).Take(3)

它检查每个项目,但直到找到与谓词匹配的三个项目。

看看Eric Lipperts对我问题的回答,因为他解释得很好:https://stackoverflow.com/a/10110269/284240

这也值得一读:http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx

最新更新