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