## C# 中的 Distinct() 方法### 简介`Distinct()` 是 C# 中一个常用的方法,用于从一个集合中移除重复元素,并返回一个包含唯一元素的新集合。它属于 `System.Linq` 命名空间,因此在使用它之前需要添加 `using System.Linq;` 语句。### 使用方法`Distinct()` 方法有两种常用的使用方法:1.
直接调用 `Distinct()` 方法:
```csharpList numbers = new List() { 1, 2, 2, 3, 4, 4, 5 };List distinctNumbers = numbers.Distinct().ToList(); // { 1, 2, 3, 4, 5 }```2.
使用自定义比较器:
```csharpclass Person{public string Name { get; set; }public int Age { get; set; }}// 自定义比较器class PersonComparer : IEqualityComparer{public bool Equals(Person x, Person y){return x.Name == y.Name && x.Age == y.Age;}public int GetHashCode(Person obj){return obj.Name.GetHashCode() ^ obj.Age.GetHashCode();}}List people = new List(){new Person { Name = "John", Age = 30 },new Person { Name = "Jane", Age = 25 },new Person { Name = "John", Age = 30 } // 重复元素};List distinctPeople = people.Distinct(new PersonComparer()).ToList();```### 注意事项- `Distinct()` 方法返回的是一个新的集合,不会修改原集合。
- `Distinct()` 方法默认使用对象的 `GetHashCode()` 和 `Equals()` 方法进行比较。
- 如果需要自定义比较方式,需要实现 `IEqualityComparer` 接口。
- `Distinct()` 方法适用于任何实现了 `IEnumerable` 接口的集合类型。### 示例
1. 从列表中删除重复的数字:
```csharp
List numbers = new List() { 1, 2, 2, 3, 4, 4, 5 };
List distinctNumbers = numbers.Distinct().ToList();
// distinctNumbers: { 1, 2, 3, 4, 5 }
```
2. 从字符串数组中删除重复的单词:
```csharp
string[] words = { "hello", "world", "hello", "world", "again" };
string[] distinctWords = words.Distinct().ToArray();
// distinctWords: { "hello", "world", "again" }
```
3. 使用自定义比较器从 Person 对象列表中删除重复的记录:
```csharp
List people = new List()
{new Person { Name = "John", Age = 30 },new Person { Name = "Jane", Age = 25 },new Person { Name = "John", Age = 30 }
};List distinctPeople = people.Distinct(new PersonComparer()).ToList();
// distinctPeople: { John, 30 }, { Jane, 25 }
```### 总结`Distinct()` 方法是 C# 中一个强大而便捷的工具,可以有效地从集合中移除重复元素,并返回一个包含唯一元素的新集合。理解它的使用方法和注意事项,可以帮助你更好地处理数据并提高代码效率。
C
中的 Distinct() 方法
简介`Distinct()` 是 C
中一个常用的方法,用于从一个集合中移除重复元素,并返回一个包含唯一元素的新集合。它属于 `System.Linq` 命名空间,因此在使用它之前需要添加 `using System.Linq;` 语句。
使用方法`Distinct()` 方法有两种常用的使用方法:1. **直接调用 `Distinct()` 方法:**```csharpList numbers = new List() { 1, 2, 2, 3, 4, 4, 5 };List distinctNumbers = numbers.Distinct().ToList(); // { 1, 2, 3, 4, 5 }```2. **使用自定义比较器:**```csharpclass Person{public string Name { get; set; }public int Age { get; set; }}// 自定义比较器class PersonComparer : IEqualityComparer{public bool Equals(Person x, Person y){return x.Name == y.Name && x.Age == y.Age;}public int GetHashCode(Person obj){return obj.Name.GetHashCode() ^ obj.Age.GetHashCode();}}List people = new List(){new Person { Name = "John", Age = 30 },new Person { Name = "Jane", Age = 25 },new Person { Name = "John", Age = 30 } // 重复元素};List distinctPeople = people.Distinct(new PersonComparer()).ToList();```
注意事项- `Distinct()` 方法返回的是一个新的集合,不会修改原集合。
- `Distinct()` 方法默认使用对象的 `GetHashCode()` 和 `Equals()` 方法进行比较。
- 如果需要自定义比较方式,需要实现 `IEqualityComparer` 接口。
- `Distinct()` 方法适用于任何实现了 `IEnumerable` 接口的集合类型。
示例**1. 从列表中删除重复的数字:**
```csharp
List numbers = new List() { 1, 2, 2, 3, 4, 4, 5 };
List distinctNumbers = numbers.Distinct().ToList();
// distinctNumbers: { 1, 2, 3, 4, 5 }
```**2. 从字符串数组中删除重复的单词:**
```csharp
string[] words = { "hello", "world", "hello", "world", "again" };
string[] distinctWords = words.Distinct().ToArray();
// distinctWords: { "hello", "world", "again" }
```**3. 使用自定义比较器从 Person 对象列表中删除重复的记录:**
```csharp
List people = new List()
{new Person { Name = "John", Age = 30 },new Person { Name = "Jane", Age = 25 },new Person { Name = "John", Age = 30 }
};List distinctPeople = people.Distinct(new PersonComparer()).ToList();
// distinctPeople: { John, 30 }, { Jane, 25 }
```
总结`Distinct()` 方法是 C
中一个强大而便捷的工具,可以有效地从集合中移除重复元素,并返回一个包含唯一元素的新集合。理解它的使用方法和注意事项,可以帮助你更好地处理数据并提高代码效率。