利用Distinct()内置方法对List集合的去重问题详解
通常情况下,我们会遇到需要对重复数据进行去重的情况,这时候可以使用 C# 语言中的 List 集合类的 Distinct() 方法来实现。
Distinct() 方法的使用
Distinct() 方法用于返回一个 IEnumerable
下面是 Distinct() 方法的使用示例:
List<int> numbers = new List<int>() { 1, 2, 2, 3, 3, 3 };
List<int> distinctNumbers = numbers.Distinct().ToList();
这里的 numbers 集合中有重复的元素,我们通过 Distinct() 方法得到 distinctNumbers 集合,其中只包含不同的元素。
需要注意的问题
元素类型的匹配问题
使用 Distinct() 方法需要注意的一个问题是,集合中的元素类型必须实现了 IEquatable
通常情况下,字符串、数字类型等基本类型已经实现了 IEquatable
以下是一个示例:
public class Person : IEquatable<Person>
{
public string Name { get; set; }
public bool Equals(Person other)
{
if (other == null) return false;
return this.Name == other.Name;
}
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
}
List<Person> persons = new List<Person>()
{
new Person { Name = "Tom" },
new Person { Name = "Jerry" },
new Person { Name = "Tom" }
};
List<Person> distinctPersons = persons.Distinct().ToList();
这里定义了一个 Person 类型,并实现了 IEquatable
自定义比较器
如果我们需要根据自己的规则进行比较和去重,可以使用 Distinct() 方法的重载版本,其中可以传入一个 IEqualityComparer
以下是一个使用自定义比较器的示例:
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
if (x == null || y == null) return false;
return x.Name == y.Name;
}
public int GetHashCode(Person obj)
{
return obj.Name.GetHashCode();
}
}
List<Person> persons = new List<Person>()
{
new Person { Name = "Tom" },
new Person { Name = "Jerry" },
new Person { Name = "TOM" }
};
List<Person> distinctPersons = persons.Distinct(new PersonComparer()).ToList();
这里自定义了一个 PersonComparer 比较器,用于根据 Name 属性进行比较和去重。可以看到,虽然有两个人名为“Tom”,但由于 PersonComparer 比较器定义的规则不区分大小写,所以这两个“Tom”只被算作一个。
总结
使用 Distinct() 方法可以方便地对List集合进行去重操作。需要注意的问题包括元素类型的匹配问题和使用自定义比较器。
以上是利用Distinct()内置方法对List集合的去重问题的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Distinct()内置方法对List集合的去重问题详解 - Python技术站