我有一个方法如下。无论列表是否包含重复项,方法都会返回 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/