zoukankan      html  css  js  c++  java
  • IComparable接口实现自定义类型的排序

    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();
            }
        }

    得出的结果:

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

    咱们用另外一种写法来实现
     
    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;
        }
    }

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

  • 相关阅读:
    [bzoj2654]tree_二分_kruskal
    [luogu1373]小a和uim之大逃离_动态规划
    [luogu1156]垃圾陷阱_动态规划_背包dp
    [luogu2209][USACO13]燃油经济性Fuel Economy_贪心
    UNIX环境高级编程——进程基本概述
    UNIX环境高级编程——进程控制
    UNIX环境高级编程——进程环境
    UNIX环境高级编程——时间和日期
    UNIX环境高级编程——Linux进程地址空间和虚拟内存
    UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数
  • 原文地址:https://www.cnblogs.com/g1mist/p/3050148.html
Copyright © 2011-2022 走看看