问题标签 [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.
asp.net - 使用 CompareTo() 根据多列进行排序
目前我有一个实现 IComparable 接口的对象(ASP.NET 3.5,VB)。当我将几个实例化的对象放入一个泛型列表时,我通过一个简单的someList.Sort
. 我的CompareTo()
功能是这样的:
这很好用,除了现在我需要按另一个属性 DateSubmitted 属性作为 Points 的子集进行排序。例如,如果三个句子有投票:3、1、1,我希望得票最高的那个(显然),并且在两个一票的句子中,最早提交的那个被列出。
CompareTo() 可以做到这一点,还是我应该再次点击数据库并在那里对其进行排序?
谢谢
c# - 如何混合/修复 IComparable 和 IComparable混乱
我有一个辅助函数,它基本上在两个对象上调用 CompareTo,但会进行一些特殊的极端情况检查、转换等。
最初我是这样编写函数的:
但问题是,如果我有一个class AwesomeClass : IComparable<AwesomeClass>
. 事实上,我有几个,因为一些老IComparable
班已经走了IComparable<T>
。然而编译器很生气,因为它无法将这些新对象转换为IComparable
. 我不知道这是否会使情况变得更糟,但其中一些是abstract
(尽管抽象类确实提供了一个实现)。
如何传达“我想要两个可以调用 CompareTo 的对象”而不让编译器给我任何信息。最好,新功能不应该看起来像BetterCompare<AwesomeClass>(this, that, out retCode);
,而只是“做正确的事”。或者有没有更好的方法来做到这一点,而无需触及每个班级,让他们都 IComparable
和IComparable<T>
?
c# - 修改 List.Contains 行为
我有一个List<MyObj>
与class MyObj : IComparable
. CompareTo
我在每个接口的MyObj
类中编写了方法IComparable
,但是当我使用它时,它应该List<MyObj>.Contains(myObjInstance)
返回。false
true
我不确定我是否理解我需要如何继续以确保在调用 then函数List
时使用我的自定义比较方法。Contains
这是我的 compareTo 实现:
注意 Symbol 属性是一个字符串。
为了澄清,我在 compareTo 方法中设置了一个停止点,它甚至没有进入那里。
有人试过吗?
谢谢。
c# - 只需要 IComparable 的 SortedList
我有一个IScriptItem
实现IComparable<IQueueItem>
. 在我看来,拥有物品似乎足以对IComparable
任何东西进行分类。但我能找到的只是字典、哈希表和排序列表,它们实际上是排序树。
我正在寻找的是一个采用 IComparables 的排序通用列表。我找错地方了吗?
c# - 排序和 IComparable 的问题
我正在尝试对ArrayList
自定义项进行排序并获得“至少一个对象必须实现 IComparable”。尽管已经IComparable
为他们实现了接口。我只是调用默认的Sort()
无参数或任何东西。我要排序的对象的定义如下:
这段代码构建得很好。还有一件事要记住,我怀疑这可能是问题所在,虽然我不明白,上面的类是一个内部类。如果这就是让我绊倒的原因,您将如何比较内部类?
.net - Comparer.Compare 需要一个实现 IComparable 的对象,但如果不是第一个参数,则会抛出异常
在 Comparer 类中比较函数的文档中,它说:
如果 a 实现了 IComparable,则 a。返回 CompareTo (b);否则,如果 b 实现 IComparable,则 b 的否定结果。返回 CompareTo (a)。
但是当我测试它时,它似乎会要求第一个输入实现 Icomparable。以下代码将产生错误:
只是我还是文档错了?
.net-3.5 - .NET 3.5 - 对象没有实现 IComparable?
在将项目(其中多次使用 IComparable 的模板方法)从 VS 2005 转换为 VS 2008 时,我遇到了一些错误:
这是 System.Object 不再实现该接口的实际事实,还是在转换过程中出现问题?我能以某种方式解决这个问题吗?
问题在于以下方法:
甚至像这样简单的东西:
导致上述错误。它在 VS 2005 中完美运行,那么现在可能是什么问题?
c# - C#:端点为空(无穷大)时的范围交集
好的,我有这些交集方法可以处理范围,只要范围端点不为空,它们就可以很好地工作:
我现在的问题是我希望他们完全支持空端点。一个空端点意味着范围在那个方向上无限大。我想通过但没有通过的两个测试例如是:
它不能立即工作的原因是 null 被认为比一切都少。但是这里 null 有时必须被认为大于一切。
知道如何以一种好的方式解决这个问题吗?
我想我要么必须先检查null
并做一些特别的事情,要么制作某种IComparer<T>
包装......但我无法弄清楚它们必须使用哪些或如何工作。必须记住,它也可以被赋予任何类型的比较器,所以从技术上讲,范围可能是相反的方向,只要给定的比较器当然考虑到这一点(在实际代码中,如果开始出现,我会抛出异常根据给定的比较器结束后)。无论如何,我在这里有点迷路:P
linq-to-xml - 如何实现 IComparable 对数字和非数字字符串进行排序
如何实现 IComparable 对数字和非数字字符串进行排序。
首先,我想在“列表”中获取最小值和最大值。
它要求我实现 ICompareable。" 至少一个对象必须实现 IComparable"
谁能帮我?这是我的代码:
这是我的 XML 文件:
c# - 应该 IEquatable, 可比在非密封类上实施?
任何人对是否或IEquatable<T>
应该IComparable<T>
通常要求T
是sealed
(如果是class
)有任何意见吗?
这个问题出现在我身上,因为我正在编写一组旨在帮助实现不可变类的基类。基类旨在提供的部分功能是相等比较的自动实现(使用类的字段以及可应用于字段以控制相等比较的属性)。完成后应该会很不错 - 我正在使用表达式树为 each 动态创建编译比较函数T
,因此比较函数应该非常接近常规相等比较函数的性能。(我正在使用一个不可变的字典键控System.Type
和双重检查锁定来以合理的方式存储生成的比较函数)
但是,出现的一件事是使用什么函数来检查成员字段的相等性。我最初的意图是检查每个成员字段的类型(我将称之为X
)是否实现IEquatable<X>
。但是,经过一番思考,我不认为这是安全的,除非X
is sealed
。原因是 if X
is not sealed
,我不能确定 ifX
是否适当地将相等检查委托给虚拟方法 on X
,从而允许子类型覆盖相等比较。
这就提出了一个更普遍的问题——如果一个类型不是密封的,它真的应该实现这些接口吗?我认为不会,因为我认为接口契约是在两种X
类型之间进行比较,而不是两种可能存在或不存在的类型X
(尽管它们当然必须X
是子类型或子类型)。
你们有什么感想?是否应该避免非密封类IEquatable<T>
?IComparable<T>
(也让我想知道是否有针对此的 fxcop 规则)
我目前的想法是让我生成的比较函数仅用于isIEquatable<T>
的成员字段,而不是使用 virtual if即使实现也是未密封的,因为该字段可能存储子类型,我怀疑大多数实现的设计是否适合继承.T
sealed
Object.Equals(Object obj)
T
T
IEquatable<T>
T
IEquatable<T>