集合 List<T> 排重方法 Distinct()

来源:互联网 发布:滴露和威露士 知乎 编辑:程序博客网 时间:2024/06/05 22:54

class ListDistinctDemo
{
static void Main(string[] args)
{
List
<Person> personList = new List<Person>(){
new Person(3),//重复数据
new Person(3),
new Person(2),
new Person(1)
};

//使用匿名方法
List<Person> delegateList = personList.Distinct(new Compare<Person>(
delegate(Person x, Person y)
{
if (null == x || null == y) return false;
return x.ID ==
y.ID;
})
).ToList();

delegateList.ForEach(s
=> Console.WriteLine(s.ID));

//使用 Lambda 表达式
List<Person> lambdaList = personList.Distinct(new Compare<Person>(
(x, y)
=> (null != x && null != y) && (x.ID == y.ID))).ToList();

lambdaList.ForEach(s
=> Console.WriteLine(s.ID));

//排序
personList.Sort((x, y) => x.ID.CompareTo(y.ID));
personList.ForEach(s
=> Console.WriteLine(s.ID));

}
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }

public Person(int id)
{
this.ID = id;
}
}

public delegate bool EqualsComparer<T>(T x, T y);

public class Compare<T> : IEqualityComparer<T>
{
private EqualsComparer<T> _equalsComparer;

public Compare(EqualsComparer<T> equalsComparer)
{
this._equalsComparer = equalsComparer;
}

public bool Equals(T x, T y)
{
if (null != this._equalsComparer)
return this._equalsComparer(x, y);
else
return false;
}

public int GetHashCode(T obj)
{
return obj.ToString().GetHashCode();
}
}
原创粉丝点击