用于从 List 中删除重复项的 C# 方法
本文关键字:方法 删除 List 用于 | 更新日期: 2023-09-27 18:01:18
我需要一种 C# 方法来使用自定义比较操作从List<T>
中删除重复项。在 .NET 4 中。有没有还是我必须自己写?
假设您的比较操作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);
}
}
}