谁有一个快速的方法去重复在c#的泛型列表?


当前回答

使用HashSet: list = new HashSet<T>(list).ToList();

其他回答

David J。的答案是一个很好的方法,不需要额外的对象,排序等。但是,它可以在以下方面进行改进:

for (int innerIndex = items.计数 - 1;内索引 > 外索引 ;内部索引--)

因此,对于整个列表,外部循环会从上到下,但内部循环会从下到“直到到达外部循环的位置”。

外部循环确保整个列表被处理,内部循环找到实际的重复项,这些只会发生在外部循环还没有处理的部分。

或者如果你不想对内循环做自底向上你可以让内循环从outerIndex + 1开始。

简单地用相同类型的List初始化HashSet:

var noDupes = new HashSet<T>(withDupes);

或者,如果你想返回一个List:

var noDupsList = new HashSet<T>(withDupes).ToList();

扩展方法可能是一种不错的方式……就像这样:

public static List<T> Deduplicate<T>(this List<T> listToDeduplicate)
{
    return listToDeduplicate.Distinct().ToList();
}

然后像这样调用,例如:

List<int> myFilteredList = unfilteredList.Deduplicate();

使用HashSet: list = new HashSet<T>(list).ToList();

如何:

var noDupes = list.Distinct().ToList();

在。net 3.5?