IComparer IEqualityComparer 集合的sort排序以及distinct 去重 还有一种更简单的方法lamda

实现排序以及去重的类

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace icomparerTest
{
    class PersonIcomparer : IComparer<Person>,IEqualityComparer<Person>
    {
        public int Compare(Person x, Person y)
        {
            if(x.name!=y.name)
            {
                return x.name.CompareTo(y.name);
            }else if(x.age!=y.age)
            {
                return x.age - y.age;
            }else
            {
                return x.height>=y.height?1:-1;
            }
        }

        public bool Equals(Person x, Person y)
        {
            if(x.name.Equals(y.name)&& x.age == y.age&&x.height==y.height)
            {
                return true;
            }
            return false;
        }

        public int GetHashCode(Person obj)
        {
            return obj.name.GetHashCode() + obj.age.GetHashCode();
        }
    }
}

 实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace icomparerTest
{
    class Person
    {
        public string name { get; set; }
        public int age { get; set; }
        public double height { get; set; }
        public Person(string name,int age,double height)
        {
            this.name = name;
            this.age = age;
            this.height = height;
        }
        public override string ToString()
        {
            return "姓名:" + name + "   年龄:" + age + "   身高:" + height;
        }
    }
}

测试

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace icomparerTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> array = new List<Person>();
            array.Add(new Person("aa",15,150));
            array.Add(new Person("aa",15,150));
            array.Add(new Person("aa",12,150));
            array.Add(new Person("aa",12,150));
            array.Add(new Person("aa",13,150));
            array.Add(new Person("bb",10,130));
            array.Add(new Person("bb",10,130));
            array.Add(new Person("bb",10,120));
            array.Add(new Person("bb",10,150));
            array.Add(new Person("bb",10,150));
            array.Sort(new PersonIcomparer());
            var array2=array.Distinct(new PersonIcomparer());
            foreach(var obj in array2)
            {
                Console.WriteLine(obj.ToString());
            }
            Console.ReadKey();
        }
    }
}

结果

 

labda 排序

array.Sort(
(x,y)=>x.name.CompareTo(y.name)==0?
(x.age.CompareTo(y.age)==0?x.height.CompareTo(y.height) :x.age.CompareTo(y.age))
:x.name.CompareTo(y.name)
);
发布了89 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m0_37879526/article/details/104524105