如何在 List < string > 中查找 List 有重复的值

如何查找 List<string>是否有重复的值?

我尝试用下面的代码。有什么最好的方法来实现吗?

var lstNames = new List<string> { "A", "B", "A" };


if (lstNames.Distinct().Count() != lstNames.Count())
{
Console.WriteLine("List contains duplicate values.");
}
103821 次浏览
var duplicateExists = lstNames.GroupBy(n => n).Any(g => g.Count() > 1);

尽量使用 GroupByAny这样的;

lstNames.GroupBy(n => n).Any(c => c.Count() > 1);

GroupBy 法;

根据指定的键对序列的元素进行分组 函数,并通过使用 指定的函数。

方法,返回 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;
}
}

会阻止 只要它找到第一个复制品。如果要在多个地方使用它,可以将其包装在一个方法(或扩展方法)中。

一个基于哈希技术的广义和紧凑的答案扩展版本:

public static bool AreAnyDuplicates<T>(this IEnumerable<T> list)
{
var hashset = new HashSet<T>();
return list.Any(e => !hashset.Add(e));
}
 class Program
{
static void Main(string[] args)
{
var listFruits = new List<string> { "Apple", "Banana", "Apple", "Mango" };
if (FindDuplicates(listFruits)) { WriteLine($"Yes we find duplicate"); };
ReadLine();
}
public static bool FindDuplicates(List<string> array)
{
var dict = new Dictionary<string, int>();
foreach (var value in array)
{
if (dict.ContainsKey(value))
dict[value]++;
else
dict[value] = 1;
}
foreach (var pair in dict)
{
if (pair.Value > 1)
return true;
else
return false;
}
return false;
}
}