it-swarm.com.de

Wie finde ich Liste? Hat doppelte Werte in Liste <string>

Wie finde ich heraus, ob der List<string> doppelte Werte hat oder nicht?

Ich habe es mit dem folgenden Code versucht. Gibt es einen besten Weg zu erreichen?

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

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

Versuchen Sie, GroupBy und Any wie zu verwenden.

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

GroupBy Methode;

Gruppiert die Elemente einer Sequenz nach einem angegebenen Schlüssel Auswahlfunktion und projiziert die Elemente für jede Gruppe mithilfe eines angegebene Funktion.

Any Methode, gibt boolean zurück;

Bestimmt, ob ein Element einer Sequenz vorhanden ist oder eine .__ erfüllt. Bedingung.

93
Soner Gönül

Wenn Sie nach dem effizientesten Weg suchen, dies zu tun,

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

stoppt sobald das erste Duplikat gefunden wird . Sie können dies in einer Methode (oder Erweiterungsmethode) zusammenfassen, wenn Sie es an mehreren Stellen verwenden.

40
Rawling

Eine verallgemeinerte und kompakte Erweiterungsversion der Antwort, die auf der Hashtechnik basiert:

public static bool AreAnyDuplicates<T>(this IEnumerable<T> list)
{
    var hashset = new HashSet<T>();
    return list.Any(e => !hashset.Add(e));
}
22
Zoltán Tamási
var duplicateExists = lstNames.GroupBy(n => n).Any(g => g.Count() > 1);
11
Nasmi Sabeer
 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;
    }
}  
0