在.net中工作如何IOrderedEnumerable.ThenBy()?(How does IO

2019-07-29 16:24发布

我想了解ThenBy是如何工作的.NET。 (我知道如何使用它,我只是不明白微软是如何实现的呢!)

根据该文件, 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的功能!

Answer 1:

它怎么能工作呢?!? 第一个排序是由长度。 第二类应该撤销第一位的排序!

否,当主比较找出两个相等的值的第二个排序比较仅协商。

IOrderedEnumerable或者,如把它,让您打造从“当前比较和另外一个时返回0请示”进行比较的另一种方式-通过实施记住所有的比较,有效地做到这一点。

我有一个博客帖子一系列其进入LINQ到对象在一定深度,提供完整的另一种实现。 的基础IOrderedEnumerable是覆盖在部分26A和26B ,与更多的细节和优化26C和26D 。

事实上,我甚至不能写返回IOrderedEnumerable的功能!

你绝对可以-无论是通过返回从返回的值OrderBy ,或自己实现它。



文章来源: How does IOrderedEnumerable.ThenBy() in .Net work?