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

时间:2013-01-16 16:46:57

标签: c# linq list

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

我试过下面的代码。有没有最好的方法来实现?

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

if (lstNames.Distinct().Count() != lstNames.Count())
{
    Console.WriteLine("List contains duplicate values.");
}

6 个答案:

答案 0 :(得分:97)

尝试使用GroupByAny之类的;

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

GroupBy方法;

  

根据指定的键对序列的元素进行分组   选择器功能并使用a为每个组投影元素   指定的功能。

Any方法,它会返回boolean;

  

确定序列的任何元素是否存在或满足a   条件。

答案 1 :(得分:40)

如果您正在寻找最有效的方法,

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

一旦找到第一个重复的就会停止。如果您将在多个地方使用它,可以将它包装在方法(或扩展方法)中。

答案 2 :(得分:24)

基于散列技术的答案的通用和紧凑扩展版本:

public static bool AreAnyDuplicates<T>(this IEnumerable<T> list)
{
    var hashset = new HashSet<T>();
    return list.Any(e => !hashset.Add(e));
}

答案 3 :(得分:11)

var duplicateExists = lstNames.GroupBy(n => n).Any(g => g.Count() > 1);

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

尝试转换为字典怎么样。

public bool HasDuplicates(List<String> lstNames)
{
                try
                {
                    var test = lstNames.ToDictionary(x => x, y => y);
                    return false;
                }
                catch (Exception ex)
                {
                    return true;
                }
}