如何查找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."); } 

尝试使用GroupByAny类似的;

 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; } }