如何查找List在List <string>中有重复的值
如何查找List<string>
是否有重复的值?
我试着用下面的代码。 有什么最好的办法来实现?
var lstNames = new List<string> { "A", "B", "A" }; if (lstNames.Distinct().Count() != lstNames.Count()) { Console.WriteLine("List contains duplicate values."); }
尝试使用GroupBy
和Any
类似的;
lstNames.GroupBy(n => n).Any(c => c.Count() > 1);
GroupBy
方法;
根据指定的键select器函数对序列的元素进行分组,并通过使用指定的函数来投影每个组的元素。
Any
方法,它返回boolean
;
确定序列的任何元素是否存在或满足条件。
如果您正在寻找最有效的方法,
var lstNames = new List<string> { "A", "B", "A" }; var hashset = new HashSet<string>(); foreach(var name in lstNames) { if (!hashset.Add(name)) { Console.WriteLine("List contains duplicate values."); break; } }
只要find第一个副本就会停下来 。 如果你在几个地方使用它,你可以把它包装在一个方法(或扩展方法)中。
基于散列技术的答案的一个广义和紧凑的扩展版本:
public static bool AreAnyDuplicates<T>(this IEnumerable<T> list) { var hashset = new HashSet<T>(); return list.Any(e => !hashset.Add(e)); }
var duplicateExists = lstNames.GroupBy(n => n).Any(g => g.Count() > 1);
怎么样试图转换成字典。
public bool HasDuplicates(List<String> lstNames) { try { var test = lstNames.ToDictionary(x => x, y => y); return false; } catch (Exception ex) { return true; } }