文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>集合的排序(IComparable和Comparer)

集合的排序(IComparable和Comparer)

时间:2010-12-19  来源:hfliyi

IComparable 在要比较的对象的所在类中实现,可以比较对象和另一个对象

IComparer在一个单独的类中实现,可以比较任意两个对象

一般情况下,IComparable给出类的默认比较代码,使用其他类给出的非默认的比较代码

IComparable提供一个方法CompareTo()

IComparer提供一个方法Compare()

这两个方法提供的参数都是System.Object类型,也就是说,可以比较任意类型的两个对象,所以,在返回结果之前,需要进行类型比较。

注:.NET Framework 在类Comparer上提供了IComparer接口的默认实现方式,类Comparer位于System.Collections命名空间中,可以对简单类型以及支持IComparable接口的任意类型进行特定的文化比较。

注意事项:

1、检查传送给Comparer.Compare()的对象,看看它们是否支持IComparable。如果支持,就是使用该实现代码

2、允许使用null值,它表示“小于”其它对象。

3、字符串根据当前的文化来处理,要根据不同的文化处理字符串,Comparer类必须使用其构造函数进行实例化,以便制定文化的System.Globalization.CultureInfo对象

4、字符串在处理的时候要区分大小写,如果要以不区分大小写的方式来处理它们,就需要使用CaseInsensitiveComparer类。

使用默认方式与非默认方式排序实例:

代码
 1 class Person:IComparable
2 {
3 private string name;
4 public string Name
5 {
6 get { return name; }
7 set { name = value; }
8 }
9 private int age;
10 public int Age
11 {
12 get { return age; }
13 set { age = value; }
14 }
15 public Person()
16 {
17 }
18 public Person(string name, int age)
19 {
20 Name = name;
21 Age = age;
22 }
23 public int CompareTo(object ob)
24 {
25 if (ob is Person)
26 {
27 Person otherPerson = (Person)ob;
28 return this.Age - otherPerson.Age;
29 }
30 else
31 {
32 throw new ArgumentException("object to compare to is not a Person object");
33 }
34 }
35 }
非默认方式: 代码
 1  class PersonCompare : IComparer
2 {
3 public static IComparer Default = new PersonCompare();
4 public int Compare(object obj1 ,object obj2)
5 {
6 if (obj1 is Person && obj2 is Person)
7 {
8 Person p1 = (Person)obj1;
9 Person p2 = (Person)obj2;
10 return Comparer.Default.Compare(p1.Name, p2.Name);
11 }
12 else
13 {
14 throw new ArgumentException("object to compare to is not a Person objects");
15 }
16 }
17 }
主函数调用方式: 代码
 1  static void Main(string[] args)
2 {
3 ArrayList list = new ArrayList();
4 list.Add(new Person("ajay",23));
5 list.Add(new Person("jacky",24));
6 list.Add(new Person("Lee",21));
7 Console.WriteLine("排序之前的数据显示如下:");
8 foreach (Person item in list)
9 {
10 Console.WriteLine(item.Name + " " + item.Age);
11 }
12 list.Sort();
13 Console.WriteLine("使用默认排序的数据显示如下:");
14 foreach (Person item in list)
15 {
16 Console.WriteLine(item.Name + " " + item.Age);
17
18 }
19 Console.WriteLine("使用非默认排序的数据显示如下:");
20 list.Sort(PersonCompare.Default);
21 foreach (Person item in list)
22 {
23 Console.WriteLine(item.Name + " " + item.Age);
24
25 }
26 }
可以看出,使用两种方式对Arraylist对象进行排序,一种默认排序方式,及List.Sort(),另一种非默认排序方式,即list.Sort(PersonCompare.Default).

使用public static IComparer Default = new PersonCompare();

使用PersonCompare.Default获取对象一个实例。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载