草庐IT

icomparable

全部标签

c# - 如何使用 IComparable 接口(interface)?

我需要一个基本示例来说明如何使用IComparable接口(interface),以便我可以按升序或降序以及我正在排序的对象类型的不同字段进行排序。 最佳答案 好吧,因为你正在使用List只使用Comparison会简单得多,例如:Listdata=...//sortbynamedescendingdata.Sort((x,y)=>-x.Name.CompareTo(y.Name));当然,对于LINQ,您可以只使用:varordered=data.OrderByDescending(x=>x.Name);但是你可以在List中重新

php - 代码是否符合 Liskov 替换原则?

在升级之前,我正在PHP5.4上测试我现有的代码。我发现以下代码不再有效,因为PHP收紧了它的继承模型。由于收紧,我一直在阅读SOLID,特别是Liskov'ssubstitutionprinciple(我是一个自学成才的程序员)这样我就可以改进我的代码并且不会遭受future的“紧缩”。interfaceIComparable{publicfunctionequals(self$other);}classAimplementsIComparable{protected$var;publicfunction__construct($v){$this->var=$v;}publicfun

java - 循环泛型 : interface IFoo <T extends IFoo <T>>

这是Java中一个众所周知的习语。参见例如thisSOdiscussion.所以基本上要定义一个接口(interface),实现它的类需要有一个方法来与它们类的对象进行比较,你会这样做:publicinterfaceIComparable>{publicintcompare(Titem);}(注意:这显然是解决特定用例的一种不必要的复杂方法-请参阅thispost-但我正在询问如何解释递归语法,不要介意特定应用程序)。简而言之,这是一个递归定义,递归没有明显的结束,我看不出编译器/类型系统是如何做到这一点的。此外,尝试用文字表达(“IComparable是一个类,其实例可以与实现ICo

java 8 - Icomparable<T> 的注释 compareTo <T> 也添加了注释 compareTo(Object o)

我有注释packagejavaannotationtest;importjava.lang.annotation.*;@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public@interfaceCustomAnnotation{}这适用于以下类中的compareTopackagejavaannotationtest;publicclassCustomerimplementsComparable{@Override@CustomAnnotationpublicintcompareTo(Customero)

c# - 构造函数中的 SortedSet<T> 和匿名 IComparer<T> 不起作用

为什么匿名函数可以作为方法的参数,而不是构造函数的参数?如果我创建一个List,它有一个带有以下签名的排序方法:publicvoidSort(IComparercomparer)以下工作的地方:Listlist=newList();list.Sort((a,b)=>a.CompareTo(b));SortedSet有一个具有类似签名的构造函数:publicSortedSet(IComparercomparer)但是在构造函数中使用匿名函数时会失败。以下内容无效:SortedSetset=newSortedSet((a,b)=>a.CompareTo(b));创建排序类按预期正常工作:p

c# - 构造函数中的 SortedSet<T> 和匿名 IComparer<T> 不起作用

为什么匿名函数可以作为方法的参数,而不是构造函数的参数?如果我创建一个List,它有一个带有以下签名的排序方法:publicvoidSort(IComparercomparer)以下工作的地方:Listlist=newList();list.Sort((a,b)=>a.CompareTo(b));SortedSet有一个具有类似签名的构造函数:publicSortedSet(IComparercomparer)但是在构造函数中使用匿名函数时会失败。以下内容无效:SortedSetset=newSortedSet((a,b)=>a.CompareTo(b));创建排序类按预期正常工作:p

c# - 至少一个对象必须实现 IComparable

varlistair=empcon.OrderBy(x=>x.CustomerConnection.OrderBy(y=>y.Id)).ToList();当我使用此语句时出现异常“至少一个对象必须实现IComparable”我该如何解决这个问题? 最佳答案 当我写错时,我的查询遇到了这个问题:IEnumerablerelations=fromrintree.OrgRelationsorderbyr.ParentUnit,r.ChildUnitselectr;这是因为父单位和子单位都是与此OrgRelation实体相关的OrgUnit

c# - 至少一个对象必须实现 IComparable

varlistair=empcon.OrderBy(x=>x.CustomerConnection.OrderBy(y=>y.Id)).ToList();当我使用此语句时出现异常“至少一个对象必须实现IComparable”我该如何解决这个问题? 最佳答案 当我写错时,我的查询遇到了这个问题:IEnumerablerelations=fromrintree.OrgRelationsorderbyr.ParentUnit,r.ChildUnitselectr;这是因为父单位和子单位都是与此OrgRelation实体相关的OrgUnit

c# - 为什么在实现 CompareTo 时必须重载运算符?

假设我有一个实现IComparable的类型。我原以为运算符==是合理的,!=,>,,>=和会通过调用CompareTo自动“正常工作”,但如果我想使用它们,我必须覆盖它们。从语言设计的角度来看,这样做有充分的理由吗?在任何情况下它对A>B真的有用吗?表现与Compare(A,B)>0不同? 最佳答案 整个情况令人烦恼。C#有太多表达相等和不相等的方式:==!=>=Equals静态方法(调用虚方法)、Equals虚方法、ReferenceEquals方法IComparable和IEquatable接口(interface)它们都有微

c# - 为什么在实现 CompareTo 时必须重载运算符?

假设我有一个实现IComparable的类型。我原以为运算符==是合理的,!=,>,,>=和会通过调用CompareTo自动“正常工作”,但如果我想使用它们,我必须覆盖它们。从语言设计的角度来看,这样做有充分的理由吗?在任何情况下它对A>B真的有用吗?表现与Compare(A,B)>0不同? 最佳答案 整个情况令人烦恼。C#有太多表达相等和不相等的方式:==!=>=Equals静态方法(调用虚方法)、Equals虚方法、ReferenceEquals方法IComparable和IEquatable接口(interface)它们都有微