如何重写List内部排序

方法一:调用IComparable<T>接口

重写ComparerTo方法 

代码如下:

 class Woman : IComparable<Woman>
    {
        public int age;
        public string name;
        public Woman() { }
        public Woman(int _age, string _name)
        {
            age = _age;
            name = _name;
        }


        //重写的CompareTo方法,根据age排序
        public int CompareTo(Woman other)
        {
            if (null == other)
            {
                return 1;//空值比较大,返回1
            }

            //如果选择name排序则会按照ABC来排序

          if(this.age!=other.age)

          {

            return this.age.CompareTo(other.age);//升序
            //return other.age.CompareTo(this.age);//降序

          }

            else

           {

              return this.name.CompareTo(other.name)//当年纪相同时通过名字排序

             }

           
         }
        public override string ToString()
        {
            return "age" + age + "name" + name ;
        }
    }

/*****************IComparable接口************************/

在main调用

//easyList为Woman列表

   easyList.Sort(); //方法一

  // easyList.Sort((x, y) => y.CompareTo(x));//方法二可调整x y改变内部排序

   foreach (var item in easyList)
   {
                
       Console.WriteLine(item.ToString());
   }
        Console.ReadLine();

/*****************IComparable接口*********************************/

方法二:调用 IComparer<T>接口

重写Compare方法

代码如下:

class Woman : IComparer<Woman>
    {
        public int age;
        public string name;
        public Woman() { }
        public Woman(int _age, string _name)
        {
            age = _age;
            name = _name;
         }
           // Compare函数
        public int Compare(Woman x, Woman y)
        {
            return x.age.CompareTo(y.age);//升序

        }

      //重写ToString方便打印

        public override string ToString()
        {
            return "age" + age + "name" + name ;
        }

    }

/*********************IComparer接口*********************************/

在main调用

//easyList为Woman列表

IComparer<Woman> comparer = new Woman();

  easyList.Sort(comparer);

   foreach (var item in easyList)
   {
                
       Console.WriteLine(item.ToString());
   }
        Console.ReadLine();

/**********************IComparer接口********************************/


猜你喜欢

转载自blog.csdn.net/Hu_jinbo/article/details/80725106