C#中集合的排序

ArrayList,List,Dictionary等C#中常用到的集合都有一个默认的sort方法,这个方法可以进行默认排序。

但是如果这些集合中的元素是自定义的类,那么这个默认的sort可能就不准确了。

文章中使用到的命名空间是system,接口是 IComparable 和 IComparer。

sort的默认无参数的比较方式,我个人认为是IComparable中的CompareTo函数。

抄写书上的两个例子来辅助记忆:

class Person : IComparable
{
    public int Age { get; set; }
    public string Name { get; set; }

    public int CompareTo(object obj)
    {
        if (!obj.GetType().Equals(this.GetType()))
            throw new Exception("");
        else
        {
            Person person = obj as Person;
            return this.Age - person.Age;
        }
    }
}
class PersonComparerName : IComparer
{
    public static IComparer Default = new PersonComparerName();

    public int Compare(object x, object y)
    {
        if (x is Person && y is Person)
            return Comparer.Default.Compare((x as Person).Name, (y as Person).Name);
        else
            throw new Exception("");
    }
}

如果在集合中添加的全是Person对象,这个集合名称为list,那么sort方法:

list.sort(),这个方法将使用Person中的CompareTo方法,通过年龄来对比

list.sort(PersonComparerName.Default),这个方法将使用Person中的Compare方法,通过名字来对比。

 

另外List,这个东西居然可以用来继承。。。。以前都不知道的,不过感觉意义不大。

sort方法还可以使用第三种方式来排序,但是第三种方式的排序需要另外写一个函数方法。

public int compareSort(Point x, Point y)
{
    if (x.X > y.X)
        return 1;
    else if (x.X < y.X)
        return -1;

    return 0;
}
Comparison sorterX = new Comparison(compareSort);
list.Sort(sorterX);

这样就可以调用了。

 

你可能感兴趣的:(学习笔录)