C# 给List<T>去重
时间: 2024-10-12 20:13:19 浏览: 88
在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<string> 去重
在C#中,List<T>是一个动态数组,用于存储同一种类型的元素。如果你有一个包含字符串的List<string>并想要去重,你可以使用多种方法:
1. **LINQ (Language Integrated Query)**:
使用 LINQ 的 Distinct() 方法,它可以按默认方式去除重复项:
```csharp
List<string> uniqueStrings = originalList.Distinct().ToList();
```
2. **自定义HashSet**:
利用 HashSet 的特性(不允许重复元素),可以先转换到 HashSet 再转回 List:
```csharp
HashSet<string> uniqueSet = new HashSet<string>(originalList);
List<string> uniqueStrings = uniqueSet.ToList();
```
3. **foreach 循环**:
如果你想遍历列表,逐个检查并添加唯一项:
```csharp
List<string> uniqueStrings = new List<string>();
foreach(string item in originalList)
{
if(!uniqueStrings.Contains(item))
{
uniqueStrings.Add(item);
}
}
```
阅读全文