问题标签 [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 投票
2 回答
9664 浏览

asp.net - 使用 CompareTo() 根据多列进行排序

目前我有一个实现 IComparable 接口的对象(ASP.NET 3.5,VB)。当我将几个实例化的对象放入一个泛型列表时,我通过一个简单的someList.Sort. 我的CompareTo()功能是这样的:

这很好用,除了现在我需要按另一个属性 DateSubmitted 属性作为 Points 的子集进行排序。例如,如果三个句子有投票:3、1、1,我希望得票最高的那个(显然),并且在两个一票的句子中,最早提交的那个被列出。

CompareTo() 可以做到这一点,还是我应该再次点击数据库并在那里对其进行排序?

谢谢

0 投票
4 回答
1587 浏览

c# - 如何混合/修复 IComparable 和 IComparable混乱

我有一个辅助函数,它基本上在两个对象上调用 CompareTo,但会进行一些特殊的极端情况检查、转换等。

最初我是这样编写函数的:

但问题是,如果我有一个class AwesomeClass : IComparable<AwesomeClass>. 事实上,我有几个,因为一些老IComparable班已经走了IComparable<T>。然而编译器很生气,因为它无法将这些新对象转换为IComparable. 我不知道这是否会使情况变得更糟,但其中一些是abstract(尽管抽象类确实提供了一个实现)。

如何传达“我想要两个可以调用 CompareTo 的对象”而不让编译器给我任何信息。最好,新功能不应该看起来像BetterCompare<AwesomeClass>(this, that, out retCode);,而只是“做正确的事”。或者有没有更好的方法来做到这一点,而无需触及每个班级,让他们 IComparableIComparable<T>

0 投票
3 回答
12355 浏览

c# - 修改 List.Contains 行为

我有一个List<MyObj>class MyObj : IComparable. CompareTo我在每个接口的MyObj类中编写了方法IComparable,但是当我使用它时,它应该List<MyObj>.Contains(myObjInstance)返回。falsetrue

我不确定我是否理解我需要如何继续以确保在调用 then函数List时使用我的自定义比较方法。Contains

这是我的 compareTo 实现:

注意 Symbol 属性是一个字符串。

为了澄清,我在 compareTo 方法中设置了一个停止点,它甚至没有进入那里。

有人试过吗?

谢谢。

0 投票
2 回答
1243 浏览

c# - 只需要 IComparable 的 SortedList

我有一个IScriptItem实现IComparable<IQueueItem>. 在我看来,拥有物品似乎足以对IComparable任何东西进行分类。但我能找到的只是字典、哈希表和排序列表,它们实际上是排序树。

我正在寻找的是一个采用 IComparables 的排序通用列表。我找错地方了吗?

0 投票
3 回答
2797 浏览

c# - 排序和 IComparable 的问题

我正在尝试对ArrayList自定义项进行排序并获得“至少一个对象必须实现 IComparable”。尽管已经IComparable为他们实现了接口。我只是调用默认的Sort()无参数或任何东西。我要排序的对象的定义如下:

这段代码构建得很好。还有一件事要记住,我怀疑这可能是问题所在,虽然我不明白,上面的类是一个内部类。如果这就是让我绊倒的原因,您将如何比较内部类?

0 投票
1 回答
296 浏览

.net - Comparer.Compare 需要一个实现 IComparable 的对象,但如果不是第一个参数,则会抛出异常

在 Comparer 类中比较函数的文档中,它说:

如果 a 实现了 IComparable,则 a。返回 CompareTo (b);否则,如果 b 实现 IComparable,则 b 的否定结果。返回 CompareTo (a)。

但是当我测试它时,它似乎会要求第一个输入实现 Icomparable。以下代码将产生错误:

只是我还是文档错了?

0 投票
4 回答
489 浏览

.net-3.5 - .NET 3.5 - 对象没有实现 IComparable?

在将项目(其中多次使用 IComparable 的模板方法)从 VS 2005 转换为 VS 2008 时,我遇到了一些错误:

这是 System.Object 不再实现该接口的实际事实,还是在转换过程中出现问题?我能以某种方式解决这个问题吗?

问题在于以下方法:

甚至像这样简单的东西:

导致上述错误。它在 VS 2005 中完美运行,那么现在可能是什么问题?

0 投票
1 回答
910 浏览

c# - C#:端点为空(无穷大)时的范围交集

好的,我有这些交集方法可以处理范围,只要范围端点不为空,它们就可以很好地工作:

我现在的问题是我希望他们完全支持空端点。一个空端点意味着范围在那个方向上无限大。我想通过但没有通过的两个测试例如是:

它不能立即工作的原因是 null 被认为比一切都少。但是这里 null 有时必须被认为大于一切。

知道如何以一种好的方式解决这个问题吗?

我想我要么必须先检查null并做一些特别的事情,要么制作某种IComparer<T>包装......但我无法弄清楚它们必须使用哪些或如何工作。必须记住,它也可以被赋予任何类型的比较器,所以从技术上讲,范围可能是相反的方向,只要给定的比较器当然考虑到这一点(在实际代码中,如果开始出现,我会抛出异常根据给定的比较器结束后)。无论如何,我在这里有点迷路:P

0 投票
2 回答
1405 浏览

linq-to-xml - 如何实现 IComparable 对数字和非数字字符串进行排序

如何实现 IComparable 对数字和非数字字符串进行排序。

首先,我想在“列表”中获取最小值和最大值。

它要求我实现 ICompareable。" 至少一个对象必须实现 IComparable"

谁能帮我?这是我的代码:


这是我的 XML 文件:

0 投票
4 回答
5593 浏览

c# - 应该 IEquatable, 可比在非密封类上实施?

任何人对是否或IEquatable<T>应该IComparable<T>通常要求Tsealed(如果​​是class)有任何意见吗?

这个问题出现在我身上,因为我正在编写一组旨在帮助实现不可变类的基类。基类旨在提供的部分功能是相等比较的自动实现(使用类的字段以及可应用于字段以控制相等比较的属性)。完成后应该会很不错 - 我正在使用表达式树为 each 动态创建编译比较函数T,因此比较函数应该非常接近常规相等比较函数的性能。(我正在使用一个不可变的字典键控System.Type和双重检查锁定来以合理的方式存储生成的比较函数)

但是,出现的一件事是使用什么函数来检查成员字段的相等性。我最初的意图是检查每个成员字段的类型(我将称之为X)是否实现IEquatable<X>。但是,经过一番思考,我不认为这是安全的,除非Xis sealed。原因是 if Xis not sealed,我不能确定 ifX是否适当地将相等检查委托给虚拟方法 on X,从而允许子类型覆盖相等比较。

这就提出了一个更普遍的问题——如果一个类型不是密封的,它真的应该实现这些接口吗?我认为不会,因为我认为接口契约是在两种X类型之间进行比较,而不是两种可能存在或不存在的类型X(尽管它们当然必须X是子类型或子类型)。

你们有什么感想?是否应该避免非密封类IEquatable<T>IComparable<T>(也让我想知道是否有针对此的 fxcop 规则)

我目前的想法是让我生成的比较函数仅用于isIEquatable<T>的成员字段,而不是使用 virtual if即使实现也是未密封的,因为该字段可能存储子类型,我怀疑大多数实现的设计是否适合继承.TsealedObject.Equals(Object obj)TTIEquatable<T>TIEquatable<T>