问题标签 [icomparable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3915 浏览

c# - 对其中一些为空的 IComparable 对象进行排序

大多数人在编写实现 IComparable<T> 的引用类型(类)时,使用的约定是 null 比任何实际对象都少。但是如果你尝试使用相反的约定,就会发生一些有趣的事情:

运行上述代码时,您会看到空引用未按预期排序。显然,A 和 B 比较时,如果 A 为对象且 B 为空,则使用用户定义的比较,但反之,如果 A 为空且 B 为对象,则使用一些 BCL 比较。

这是一个错误吗?

0 投票
2 回答
9752 浏览

c# - 自定义 Treeview 的排序

我有一个树视图,需要根据每个节点的标签以及 alpha beta 进行排序。

例如:

  • 节点 1,标签 = A,文本 =苹果
  • 节点2,标签= B,文本=气球
  • Node3,标签= A,文本=帮助

我想对它进行排序,带有标签 A 的节点将是第一个,然后是带有标签 B 的节点。但是,我希望包含标签 A 的节点从 A 到 Z 排序。

(顺序 = Node1,Node3,Node2

请帮助我,我该怎么做?

提前致谢!

0 投票
8 回答
85054 浏览

c# - 如何比较泛型类型的值?

如何比较泛型类型的值?

我已将其减少到最小样本:

错误是:

运算符“>=”不能应用于“T”和“T”类型的操作数。

到底怎么回事!?T已经被限制为IComparable,即使将其限制为值类型 ( where T: struct),我们仍然不能应用任何运算符<><=>=或. (我知道涉及and的解决方法,但它对关系运算符没有帮助)。==!=Equals()==!=

所以,两个问题:

  1. 为什么我们会观察到这种奇怪的行为?是什么让我们无法比较已知的泛型类型的值IComparable?它不是以某种方式破坏了通用约束的全部目的吗?
  2. 我该如何解决这个问题,或者至少解决它?

(我意识到已经有一些与这个看似简单的问题相关的问题 - 但没有一个线程给出详尽或可行的答案,所以在这里。)

0 投票
3 回答
10249 浏览

c# - 如何在 datarow[] 的列中找到最大值?

我有一个简单的问题,但我只是不理解我在此处或 MSDN 中找到的任何示例。(我还是 C# 和所有数据集函数的新手)。

我有一个数据表“tblRoom”,它的列是“建筑”,“公寓”和“房间”,它们都是整数和表的主键(它是公寓的弱实体(这是建筑的弱实体),没有其他属性/列)。

我也有DataRow[] roomCollection使用以下代码选择建筑物中的特定公寓:

所有这一切都运行良好(我猜......)。现在我想从这间公寓获得房间的最大值(这间公寓的最大房间号)。我试过这些代码无济于事:

我只是没有从工具提示中得到我想在函数中写什么。它在没有 IEnumerable 或 Icomparable 时抛出异常。

我需要写什么来获得房间列中的最大值(int)?任何人都知道“傻瓜的 [something]”,它会向白痴解释它,因为我不明白错误/工具提示的含义,我想在Max().

编辑:工具提示建议输入这些(显示相关):

我真的不明白:(

谢谢你,谢伊。

0 投票
3 回答
1870 浏览

c# - 如何使用“is”来测试类型是否支持 IComparable?

我想在排序之前检查一个类型是否支持 IComparable,但我发现使用“is”检查一个类型是否支持 IComparable 接口并不总是给我正确的答案。例如,typeof(int) is IComparable返回 false,即使 int 确实支持 IComparable 接口。

我注意到typeof(int).GetInterfaces()列出 IComparable 并typeof(int).GetInterface("IComparable")返回 IComparable 类型,那么为什么“is”不能按我的预期工作?

0 投票
3 回答
6849 浏览

c# - IComparable 和 IComparable

我应该同时实现IComparable和泛型IComparable<T>吗?如果我只实现其中一个,是否有任何限制?

0 投票
3 回答
320 浏览

c# - Compare() 方法,父子对象排序不完美

我有这个作业。我是初学者C#程序,现在学习C#和Java

作业:编写获取 Drink[] 数组的静态方法,其中 AlcoholDrink 具有不同的酒精值。该方法返回一个包含三个最高酒精值的数组!如果数组中没有那么多酒精饮料,则该方法返回一个空引用!

我试过写这个方法,但它不能正常工作......

原因在 sz[1] = (AlcoholDrink)t[1]; 它是一个饮料对象(非酒精),我不明白为什么它在那里......

或者我的比较方法不完美,可能有错误......我该如何瞄准,非酒精饮料对象(Drink Objects)到数组的末尾?

这是我的 C# 代码:

0 投票
1 回答
108 浏览

c#-4.0 - 如何将我的特殊排序实现为 CompareTo

所以我有以下struct

我在某处执行以下操作

现在我想实施System.IComparable<Foo>例如。的优势.Sort()Foo[]

如何将逻辑(从我的特殊/有线OrderBy/ ThenBy)转移到int CompareTo(Foo foo)

0 投票
1 回答
231 浏览

c# - C# 按值对对象进行排序

我想保存一个CollidableActor对象的列表,按它们的属性“ .Position.X ”排序。

我想知道什么是最快(最有效)的方法。起初我想使用 SortedDictionary,然后是 SortedList,但我读到 SortedDictionaries 无论如何都更快。

现在我很困惑,因为我不知道我想要字典还是列表。此外,在实现IComparable接口并创建我的CompareTo()方法时,仅返回.Position.X就足够了吗?

如果没有,根据.Position.X,是否有更好的结构或类可以在我添加/删除它们时快速排序?(我会经常从列表中添加/删除对象;在添加对象时进行排序会更好,还是在使用列表之前进行更新?)。

谢谢你。

编辑:事实上,由于所有对象都是唯一的,某种 HashSet 集合是否可取?谢谢。

0 投票
3 回答
4995 浏览

c# - 空参数的 IComparable 行为

我正在实施IComparableIComprable<T>在我的一门课程中。CompareTo当给定一个空参数时,对于每种情况下的方法应该如何表现,是否有任何建议?它应该返回一个正数还是抛出一个ArgumentNullException?或者这种行为会因实现类而异?

我看到了 MSDN 文档(这里这里),但在这个主题上没有什么可说的。任何帮助将不胜感激。