1

如何仅使用小于关系对 C# 中的对象数组进行排序。即不使用三值IComparer。

当数组的元素构成一个总 order[1] 时,使用 IComparer 接口和 Array.Sort[0] 方法不是问题。然而,在某些情况下,我们面临着对部分有序集进行排序的任务[2]。在这些情况下,无法正确实现 IComparer 接口。可能存在不小于、等于或大于某些其他元素的元素对。

我总是可以实现自己的排序算法,接受小于谓词,但是必须有一些库函数,或者没有?

[0] http://msdn.microsoft.com/en-us/library/system.array.sort.aspx

[1] https://en.wikipedia.org/wiki/Total_order

[2] https://en.wikipedia.org/wiki/Partially_ordered_set

4

2 回答 2

0

我真的不明白你为什么要这样做?这会让你的排序变慢。通常排序返回 -1/0/1 的原因是您只需要检查两个元素一次;int[] myIntArray = new int[] { 10,40,20,35,8 }

当你比较 [0] 和 [4] 时,你得到 1,然后你知道 [4] 小于 [0] 并且不需要再次检查 [4] 和 [0]。

但是如果你只使用lessThan,你会得到“假”,并且不知道[4]是否小于[0]而不具体检查,因为10 < 8是假的,而8 < 10是真的。

所以,你看,我认为你并不是真的只想使用 lessThan。只需使用 ICompare...

另外,对于排序等,我认为使用列表比使用数组更好。少装箱/拆箱。

于 2013-03-13T10:14:23.920 回答
0

感谢 Nick 在另一篇 Stack Overflow 帖子中找到答案:

使用 LINQ 进行拓扑排序

简而言之; 没有简单的库单线来解决问题。

于 2013-03-13T11:48:24.537 回答