vbIOrderedEnumerable.ThenBy() 在 .Net 中如何工作



我想了解ThenBy在.Net中的工作原理。 (我知道如何使用它,我只是不明白Microsoft是如何实现它的!

根据文档,string_list.OrderBy(Function (x) x.length).ThenBy(Function (x) x)应输出按长度排序的字符串列表,然后按字母顺序排序。 怎么可能行得通?!? 第一种排序是按长度排序。 第二种排序应该撤消第一种排序!

假设以下代码:

Dim sorted_by_length As IOrderedEnumerable(Of String)
sorted_by_length = string_list.OrderBy(Function (x) x.length)
sorted_by_length = sorted_by_length.ThenBy(Function

这是我尝试在不使用ThenBy的情况下实现最后一行:

Dim sorted_by_length As IOrderedEnumerable(Of String)
sorted_by_length = string_list.OrderBy(Function (x) x.length)
'my implementation of OrderBy:
Dim e as IEnumerator(Of String) = sorted_by_length.GetEnumerator
Do While e.MoveNext
    'I have no idea what to write here!
Loop

这里有一些魔力... 是否有一些 e.GetPreviousKeySelector() 函数? 事实上,我甚至不能编写一个返回 IOrderedEnumerable 的函数!

怎么可能行得通?!?第一种排序是按长度排序。第二种排序应该撤消第一种排序!

否,仅当主要比较找到两个相等的值时,才会参考第二个排序比较。

IOrderedEnumerable实现通过有效地记住所有比较来做到这一点 - 或者,作为另一种说法,允许您从"当前比较和另一个比较在返回 0 时进行查询"构建比较。

我有一篇博客文章系列,深入探讨了 LINQ to Objects,提供了一个完整的替代实现。IOrderedEnumerable的基础在第 26a 和 26b 部分中介绍,在 26c 和 26d 中提供了更多详细信息和优化。

事实上,我甚至不能编写一个返回 IOrderedEnumerable 的函数!

你绝对可以 - 要么返回从 OrderBy 返回的值,要么通过自己实现它。

相关内容

  • 没有找到相关文章

最新更新