【问题标题】:Comparator/Sorting/Equatable methodology and return value比较器/排序/等式方法和返回值
【发布时间】:2015-04-14 22:10:56
【问题描述】:

好的,所以我将把我学到的所有东西都用 C# 来实现。鉴于我有 Java 的背景,到目前为止我的旅程非常顺利,但我在使用 Comparer 对象和函数等方面遇到了问题。我不关心直接实现/翻译,但我想知道如何C# 比较两个通用值。它用什么来分类它们?哈希码,或者一些 C# 特定的方法?

所以澄清一下,我知道如何使用 C# 中的方法进行排序、搜索等。我想知道幕后发生了什么——比较器和其他函数用来比较两个泛型值的函数是什么?

【问题讨论】:

  • int CompareTo (object other): msdn.microsoft.com/en-us/library/…
  • 您是使用“通用”作为“对象”的通用术语,还是使用“通用”作为“C# 泛型”的术语? :) 一些显示您试图理解的示例代码可能会有所帮助。 (在编辑您的帖子时,请考虑删除与问题没有直接关系的“您的生活故事”文字)。

标签: c# sorting compare iequalitycomparer


【解决方案1】:

我想知道 C# 如何比较两个泛型值

它不能/不能,这就是为什么有 ICompariable 和 IComparer 接口..

我想知道引擎盖下发生了什么

如果您说的是 .Net 提供的类型,那么..

如果您有一个已经支持 IComparer 的类型数组(例如字符串或整数),则可以对该数组进行排序,而无需提供对 IComparer 的任何显式引用。在这种情况下,数组的元素会为您转换为 IComparer (Comparer.Default) 的默认实现。

How to use the IComparable and IComparer interfaces in Visual C# 可能是我见过的针对您的问题的最佳文章。

IComparable的作用是提供一种比较两个特定类型对象的方法

IComparer 的作用是提供额外的比较机制。例如,您可能希望在多个字段或属性上提供类的排序,在同一字段上提供升序和降序,或两者兼而有之。

【讨论】:

  • 这一切都很好,但我想知道引擎盖下发生了什么。我知道如何使用 IComparer/IComparable/assorted 方法和算法,而我不知道如何使用的东西我可以很容易地弄清楚。我想最简单的表达方式是我想看看它在比较时到底做了什么。显然,最好的方法是查看源代码,但如果我能在任何地方找到 C# 源代码,我会很烦恼。
  • 我提供的链接清楚地说明了正在发生的事情,在某些时候它只是Note that the IComparer.Compare method requires a tertiary comparison. 1, 0, or -1 is returned depending on whether one value is greater than, equal to, or less than the other. The sort order (ascending or descending) can be changed by switching the logical operators in this method.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多