有没有人有一个很好而有效的扩展方法来查找项目序列中是否有重复项?
猜猜我可以将return subjects.Distinct().Count() == subjects.Count()
放入扩展方法中,但是有点感觉应该有更好的方法。该方法将必须对元素计数两次,并对所有离散元素进行分类。更好的实现应该在找到的第一个重复项上返回true。有什么好的建议吗?
我认为轮廓可能是这样的:
public static bool HasDuplicates<T>(this IEnumerable<T> subjects)
{
return subjects.HasDuplicates(EqualityComparer<T>.Default);
}
public static bool HasDuplicates<T>(this IEnumerable<T> subjects, IEqualityComparer<T> comparer)
{
...
}
但是还不确定它的智能实现会如何...
最佳答案
public static bool HasDuplicates<T>(this IEnumerable<T> subjects)
{
return HasDuplicates(subjects, EqualityComparer<T>.Default);
}
public static bool HasDuplicates<T>(this IEnumerable<T> subjects, IEqualityComparer<T> comparer)
{
HashSet<T> set = new HashSet<T>(comparer);
foreach (T item in subjects)
{
if (!set.Add(item))
return true;
}
return false;
}
关于C#:IEnumerable <T>的良好而有效的实现。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1134180/