我有一个方法如下。无论列表是否包含重复项,方法都会返回 false/true。我想扩展我的方法,例如(可选)我想从检查中排除特定项目。例如,我想像现在一样检查整个列表,或者我想说例如排除:string.empty 项目或例如 string.empty 和“某个词”。是否可以?

public static bool IsListContainsDuplicates<T>(List<T> list)
{
    return list.GroupBy(n => n).Any(c => c.Count() > 1);
}

最佳答案

public static bool ContainsDuplicates<T>(this IEnumerable<T> items, IEnumerable<T> itemsToExclude = null)
{
    if (itemsToExclude == null) itemsToExclude = Enumerable.Empty<T>();
    return items.Except(itemsToExclude)
                .GroupBy(n => n)
                .Any(c => c.Count() > 1);
}

但我更喜欢这个实现,因为它的性能更高:
public static bool ContainsDuplicates<T>(this IEnumerable<T> items, IEnumerable<T> itemsToExclude = null)
{
    if (itemsToExclude == null) itemsToExclude = Enumerable.Empty<T>();
    HashSet<T> set = new HashSet<T>();
    return !items.Except(itemsToExclude).All(set.Add);
}

关于c# - 检查 List<T> 是否有要排除的可选单词的重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52513087/

10-16 08:28