您的位置:首页 > 编程语言 > C#

C#排序函数和自定义比较器

2015-11-06 12:18 441 查看
在C#中,要比较两个数组,可以调用

System.Array.Sort(...)方法

List等也有Sort()方法

有两种方式可以为自己的类提供排序;

1.类实现接口 IComparable

2.创建比较器类,该类实现接口IComparer

第二种方法的优点是,你可以在不修改已有的类,创建自己的比较器类,而且能实现比第一种方法更加灵活的方式;

//rorger,2011
//IComparable & IComparer
//using Sysem.Collections  required
using System;
using System.Linq;
using System.Text;
using System.Collections;

namespace AnimalCompare
{
class Program
{
public class Animal:IComparable
{

private string name;
private int age;
public string Name
{
get{return name;}
set{name=value;}
}
public int Age
{
get { return age; }
set{age=value;}
}

public Animal(string name,int age )
{
this.name = name;
this.age = age;
}

public int CompareTo(Object obj)
{
Animal other = obj as Animal;
int result = name.CompareTo(other.name);
if (result ==0)
{
result = age.CompareTo(other.age);
}
return result;
}
public override string ToString()
{
return string.Format("{0},{1}", name, age);
}
}

public class AnimalComparer:IComparer
{
public int Compare(object lhs,object rhs)
{
Animal aniLhs = lhs as Animal;
Animal aniRhs = rhs as Animal;
int result = aniLhs.Age.CompareTo(aniRhs.Age);
if (result == 0)
{
result = aniLhs.Name.CompareTo(aniRhs.Name);
}

return result;
}
}

static void Main(string[] args)
{
Animal[] animals = new Animal[]{
new Animal("ElephantBig",5),
new Animal("ElephantBig",3),
new Animal("ElephantNano",1)
};

foreach (Animal animal in animals)
{
Console.WriteLine(animal);
}
Console.WriteLine("/nAfter soring...");
Array.Sort(animals);
foreach (Animal animal in animals)
{
Console.WriteLine(animal);
}

Console.WriteLine("/nUsing IComparer...");
Array.Sort(animals, new AnimalComparer());
foreach (Animal animal in animals)
{
Console.WriteLine(animal);
}
}
}
}

/*
*ouput:
ElephantBig,5
ElephantBig,3
ElephantNano,1

After soring...
ElephantBig,3
ElephantBig,5
ElephantNano,1

Using IComparer...
ElephantNano,1
ElephantBig,3
ElephantBig,5
Press any key to continue . . .
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: