C# 给List<T>去重
时间: 2024-10-12 14:13:19 浏览: 36
在C#中,如果你有一个`List<T>`需要去除重复元素,可以使用多种方法来实现,这里列举几种常见的做法:
1. ** LINQ 的 Distinct()**:
```csharp
List<T> uniqueItems = originalList.Distinct().ToList();
```
这个方法会返回一个新的列表,其中包含了原始列表中唯一的元素。
2. **自定义扩展方法**:
创建一个静态扩展方法,对泛型类型T进行操作,例如使用HashSet存储唯一元素:
```csharp
public static List<T> RemoveDuplicates(this List<T> list)
{
HashSet<T> set = new HashSet<T>(list);
return set.ToList();
}
```
然后用法就像:
```csharp
List<T> uniqueList = originalList.RemoveDuplicates();
```
3. ** foreach 循环**:
遍历列表,将每个元素添加到新列表,只有当它还未存在于新列表中时才添加:
```csharp
List<T> uniqueItems = new List<T>();
foreach (T item in originalList)
{
if (!uniqueItems.Contains(item))
{
uniqueItems.Add(item);
}
}
```
相关问题
C# list<XYZ>去重
在C#中,如果你有一个`List<T>`类型的集合,其中包含同一种类型`XYZ`的对象,并你想去除其中的重复项,你可以使用多种方法:
1. **使用LINQ**:
使用Lambdas和`Distinct()`方法可以方便地从列表中筛选出唯一元素:
```csharp
List<XYZ> uniqueItems = originalList.Distinct().ToList();
```
2. **自定义IEqualityComparer<T>**:
如果`XYZ`实现了`IEquatable<XYZ>`或者你为它定义了相等性的规则,你可以创建一个比较器并传给`Distinct()`:
```csharp
var comparer = new MyXYZEqualityComparer();
List<XYZ> uniqueItems = originalList.Distinct(comparer).ToList();
```
3. **添加到新的HashSet**:
HashSet是一个不允许有重复元素的数据结构,你可以先转换成HashSet再转回List:
```csharp
HashSet<XYZ> hashSet = new HashSet<originalList>();
List<XYZ> uniqueItems = hashSet.ToList();
```
c#列表list根据code去重
在C#中,如果你有一个`List<int>`或者更一般的`List<T>`类型的集合,并想要去除其中的重复元素(基于某个属性,比如`int code`),可以使用`Distinct()`方法配合`IEqualityComparer<T>`。这里是一个简单的例子:
```csharp
List<int> codes = new List<int>() { 1, 2, 2, 3, 4, 4, 5 };
codes = codes.Distinct(new List<int>.DistinctEqualityComparer()).ToList();
```
在这个示例中,我们创建了一个新的`DistinctEqualityComparer`实例,它会忽略值相等的对象,因此重复的`code`值会被自动去重。
如果你想基于自定义的比较规则,例如`code`字段,你可以创建一个实现了`IEqualityComparer<int>`的类,然后传给`Distinct()`方法:
```csharp
public class CodeEqualityComparer : IEqualityComparer<int>
{
public bool Equals(int x, int y)
{
// 根据code属性的实际情况进行比较
return x == y;
}
public int GetHashCode(int obj)
{
return obj.GetHashCode();
}
}
// 使用去重类
List<int> codes = ...;
codes = codes.Distinct(new CodeEqualityComparer()).ToList();
```
阅读全文