实现排序以及去重的类
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)
);