你的位置:首页 > 软件开发 > ASP.net > C#排序比较

C#排序比较

发布时间:2016-03-22 09:00:10
与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序。排序规范如下IComparable接口(包括IComparable接口和IComparable<T>接口)>和<运算符当需要实现排序算法时,使用ICompara ...

与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序。排序规范如下

  • IComparable接口(包括IComparable接口和IComparable<T>接口)
  • >和<运算符

当需要实现排序算法时,使用IComparable接口。在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类实现了IComparable接口。

get='_blank'>string[] colors={"Green", "Red", "Blue"};Array.Sort(colors)foreach(string c in colors)  Console.Write(c+ " ");
public interface IComparable  int CompareTo(Object obj);}public interface IComparable<in T>{  int CompareTo(T other);}
C#排序比较

这两个接口定义了相同的功能。对于值类型,IComparable<T>接口效率高于ICompare接口。上面的两个接口的CompareTo方法都按照下面的方式运行:

  • 如果a排在b后面,那么a.CompareTo(b)返回1
  • 如果a和不一样,那么返回0
  • 如果a排在不前面,那么返回-1

我们来看下面的示例代码:

C#排序比较
internal struct Note : IComparable, IComparable<Note>, IEquatable<Note>{  private int semitonesFromA;  public int SemitonesFromA  {    get { return semitonesFromA; }  }  public Note(int semitonesFromA)  {    this.semitonesFromA = semitonesFromA;  }  // generic IComparable<T>  public int CompareTo(Note other)  {    if (Equals(other))      return 0;    return SemitonesFromA.CompareTo(other.SemitonesFromA);  }  // non-generic IComaparable  public int IComparable.CompareTo(object other)  {    if (!(other is Note))      throw new InvalidOperationException("CompareTo: Not a note");    return CompareTo((Note)other);  }  public static bool operator <(Note n1, Note n2)  {    return n1.CompareTo(n2) < 0;  }  public static bool operator >(Note n1, Note n2)  {    return n1.CompareTo(n2) > 0;  }  // for IEquatable  public bool Equals(Note other)  {    return this.SemitonesFromA == other.SemitonesFromA;  }  // override Object.Equals  public override bool Equals(object other)  {    if (!(other is Note))      throw new InvalidOperationException("CompareTo: Not a note");    return Equals((Note)other);  }  public override int GetHashCode()  {    return SemitonesFromA.GetHashCode();  }  public static bool operator ==(Note n1, Note n2)  {    return n1.Equals(n2);  }  public static bool operator !=(Note n1, Note n2)  {    return !(n1 == n2);  }}

原标题:C#排序比较

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录