从(无限)IEnumerable 中获取 n 个不同项目的简单 LINQ 方式
Easy LINQ-way to take n distinct items from an (infinite) IEnumerable
我有一个类似于生成器的无限 IEnumerable
源,我想从中获取 n 个不同的项目。是否有一种简单的 LINQ 风格的方法(仍然很快)?
如果没有简单的方法,我想出的算法好吗?:
- 取n件
- 呼叫不同
- 调用次数
- 如果计数 < n
- 取 n - 计数项
- 连接这些并转到 2
- 结束
只需在 Take
之前调用 Distinct
即可获取 n 个不同的元素:
var nDistincItems = source
.Distinct()
.Take(n);
我有一个类似于生成器的无限 IEnumerable
源,我想从中获取 n 个不同的项目。是否有一种简单的 LINQ 风格的方法(仍然很快)?
如果没有简单的方法,我想出的算法好吗?:
- 取n件
- 呼叫不同
- 调用次数
- 如果计数 < n
- 取 n - 计数项
- 连接这些并转到 2
- 结束
只需在 Take
之前调用 Distinct
即可获取 n 个不同的元素:
var nDistincItems = source
.Distinct()
.Take(n);