C#方法从List <t> </t>中删除重复项

时间:2011-07-03 20:18:51

标签: c# .net list

我需要一个C#方法,使用自定义比较操作从List<T>中删除重复项。在.NET 4.是否有一个或者我必须自己编写它?

2 个答案:

答案 0 :(得分:7)

假设你的比较操作是IEqualityComparer<T>或者可以转换为它,你可以使用LINQ:

var newList = oldList.Distinct(customComparer).ToList();

显然,创建一个 new 列表而不是从中删除元素,但在大多数情况下这是可以的。如果不是,你总是可以用新列表完全替换旧列表的内容......

答案 1 :(得分:6)

您可以使用Jon's answer,或者如果您确实要从现有列表中删除重复项,则可以使用以下内容:

public static void RemoveDuplicates<T>(this IList<T> list, IEqualityComparer<T> comparer = null)
{
    comparer = comparer ?? EqualityComparer<T>.Default;

    var uniques = new HashSet<T>(comparer);
    for (int i = list.Count - 1; i >= 0; --i)
    {
        if (!uniques.Add(list[i]))
        {
            list.RemoveAt(i);
        }
    }
}