2

我有一个项目列表,我想从该列表中选择 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 是它在停止过滤之前匹配的元素数。

4

1 回答 1

8

我假设你还没有理解 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

于 2013-10-16T11:08:12.760 回答