【问题标题】:LINQ Optimizations for IOrderedEnumerableIOrderedEnumerable 的 LINQ 优化
【发布时间】:2009-07-17 22:49:29
【问题描述】:

是否有人知道 LINQ 库(或公开可用的实用程序库)中是否有任何内置功能可优化 IOrderedEnumerable<T> 上的操作,而不是 IEnumerable<T>

例如,理论上,Contains<T>() 扩展在应用于有限 IOrderedEnumerable<T> 并且 T 是 IComparable 时可能会被优化为使用二分搜索。

另一个例子是 Distinct<T>() 的优化版本,它可以延迟和流式传输(因为在有序、可比较的集合上,您始终可以使用跳过/匹配技术来生成不同的集合)。

【问题讨论】:

    标签: c# .net linq optimization


    【解决方案1】:

    那里有问题...

    • 不能对IOrderedEnumerable<T> 执行二进制搜索,因为理想情况下它需要索引器访问列表/数组。所以它必须首先调用ToList()/ToArray() 之类的东西
    • Distinct 适用于 T 项目,但 OrderBy 适用于每个 T 的某些方面 - 它并不完全相同,除非您碰巧知道它是由item=>item;这种情况很少见(而且很难证明)。

    【讨论】:

    • 优点...我没有考虑到在所有情况下订购集合的含义。
    • Nitpick:您不需要知道它是按 item=>item 排序的,只要您知道传递给 Distinct 的 IEqualityComparer 遵循与 OrderBy 使用的相同的排序即可。但是,正如您所说,您不能在所有情况下都知道这一点。我想您可以捕获 OrderBy/ThenBy 使用的 IComparer,然后使用它,但这可能工作量太大。
    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多