用于从 List 中删除重复项的 C# 方法

本文关键字:方法 删除 List 用于 | 更新日期: 2023-09-27 18:01:18

我需要一种 C# 方法来使用自定义比较操作从List<T>中删除重复项。在 .NET 4 中。有没有还是我必须自己写?

用于从 List<T> 中删除重复项的 C# 方法

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

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

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

你可以选择Jon的答案,或者如果你真的想从现有列表中删除重复项,这样的事情就可以了:

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);
        }
    }
}