C#中Linq的去重方式Distinct详解
在C#中使用Linq可以方便地操作集合数据,去重是常见的操作之一,Distinct方法可以帮助我们快速实现去重。
Distinct方法的语法
使用Linq的Distinct方法可以对一个集合进行去重。其语法如下:
public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source);
其中参数source
表示输入的集合,返回值为一个去重后的IEnumerable<TSource>
类型的序列。
Distinct方法的使用方式
Distinct方法可以应用于所有实现了IEnumerable
var list = new List<int>() { 2, 5, 4, 2, 3, 1, 5, 3 };
var distinctList = list.Distinct();
上面的代码中,我们创建一个整数类型的List集合,其中包含重复的元素。调用Distinct方法获取去重后的集合,distinctList
中的元素是2, 5, 4, 3, 1
。
Distinct方法原理
Distinct方法通过比较集合中的元素来实现去重,基本原理为:使用对元素进行哈希的方法来检测重复元素。Distinct方法通过调用元素的GetHashCode方法来检测元素的哈希码,如果两个元素的哈希码相同,则调用元素的Equals方法比较它们是否相等。
默认情况下,Distinct方法使用元素类型的默认比较器(EqualityComparer
自定义Distinct方法的比较器
有时候默认的比较器不能满足我们的需求,我们可以自定义比较器来完成特定的比较操作。例如:我们有一个Person类,需要按照行业来进行去重:
class Person
{
public string Name { get; set; }
public string Industry { get; set; }
}
var people = new List<Person>()
{
new Person { Name = "张三", Industry = "IT" },
new Person { Name = "李四", Industry = "IT" },
new Person { Name = "王五", Industry = "金融" },
new Person { Name = "赵六", Industry = "金融" },
};
var distinctPeople = people.Distinct(new PersonComparer());
上面的代码中,我们定义了一个PersonComparer类,实现了IEqualityComparerIndustry
去重后的集合。
下面是PersonComparer类的定义和使用:
class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Industry == y.Industry;
}
public int GetHashCode(Person obj)
{
return obj.Industry.GetHashCode();
}
}
总结
使用Linq的Distinct方法可以快速实现集合的去重操作,可以应用于所有实现了IEnumerable
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Linq的去重方式Distinct详解 - Python技术站