IComparable接口实现自定义类型的排序

时间:2023-01-02 08:37:02
CompareTo(Object) 方法的实现必须返回有三个值之一
如下表中所示。
返回值 参数比较
大于0 x>y
等于0 x=y
小于0 x<y
首先定义一个用于测试的Person类
 
 class person : IComparable
    {
        public string Name { set; get; }
        public int Age { set; get; }

        public override string ToString()
        {
            return "name: " + this.Name + "  " + "age: " + this.Age;
        }
    }
接着使用第一种方法:CompareTo(Object) 方法来实现IComparable接口

 

public int CompareTo(object obj)
{
    person s = obj as person;

    return this.Age.CompareTo(s.Age);
}
接着,进行第一次排序测试

 

class Program
    {
        static void Main(string[] args)
        {
            person[] ps = new person[] { new person() { Name = "gaoning", Age = 21 }, new person() { Name = "laohuan", Age = 20 }, new person() { Name = "lihong", Age = 22 }, new person() { Name = "qinqi", Age = 19 } };

            Array.Sort(ps);

            foreach (var item in ps)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadKey();
        }
    }

得出的结果:
IComparable接口实现自定义类型的排序

可见,我们已经实现了自定义类型的排序。

咱们用另外一种写法来实现
 
public int CompareTo(object obj)
{
    person s = obj as person;

    if (s.Age > this.Age)
    {
         return 1;
    }
    else if (s.Age == this.Age)
    {
         return 0;
    }
    else
    {
        return -1;
    }
}

测试完后的效果和第一次的一样,就不发了。
这样,我们就简单的实现了自定义类型的排序。这只是我初步学习的结果,如果有什么不足或者错误的地方,恳请各位指出。