Enumerable.Distinct<TSource> (IEnumerable<TSource>, IEqualityComparer<TSource>),
例如数据类为
class School
{
public int Id { getset}
public string Name { getset}
//是否重点学校
public bool IsKeySchool { getset}
}
实现IEqualityComparer<School>的比较器类为
class SchoolComparer : EqualityComparer<School>
{
public override bool Equals(School x, School y)
{
return x.IsKeySchool==y.IsKeySchool
}
public override int GetHashCode(School obj)
{
return obj.IsKeySchool.GetHashCode()
}
}
原始列表为
var schoolList = new List<School>{
new School{Id=1, Name="三中",IsKeySchool=true},
new School{Id=2, Name="五中",IsKeySchool=true},
new School{Id=3, Name="十中",IsKeySchool=false},
new School{Id=4, Name="十五中",IsKeySchool=true},
new School{Id=5, Name="二十中",IsKeySchool=false},
}
执行
var tempList = schoolList.Distinct(new SchoolComparer())
结果就只有两条“三中”和“十中”
public class d{
public int a, b, x, y
}
public class myEqual : IEqualityComparer<d>
{
public myEqual() {
}
public bool Equals(d x, d y)
{
if (x == null || y == null) return false
return x.x == y.x &&x.y == y.y
}
public int GetHashCode(d obj)
{
return obj.GetHashCode()
}
}
static void Main(string[] args)
{
List<d>list = new List<d>()
d g = new d()
g.a=1g.b=2g.x=11g.y=12
list.Add(g)
d j=new d()
j.a = 3j.b = 4j.x = 11j.y = 12
list.Add(g)
var a = list.Distinct(new myEqual())
Console.ReadKey()
}
照我这样就行了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)