Hat jemand eine gute und effiziente Erweiterungsmethode zum Finden, ob eine Sequenz von Elementen irgendwelche Duplikate hat?C#: Eine gute und effiziente Implementierung von IEnumerable <T> .HasDuplicates
Ich denke, ich könnte return subjects.Distinct().Count() == subjects.Count()
in eine Erweiterungsmethode setzen, aber irgendwie fühlt, dass es einen besseren Weg geben sollte. Diese Methode müsste Elemente zweimal zählen und alle district Elemente aussortieren. Eine bessere Implementierung sollte True für das erste gefundene Duplikat zurückgeben. Irgendwelche guten Vorschläge?
stelle ich mir die Umrisse so etwas wie dies sein könnte:
public static bool HasDuplicates<T>(this IEnumerable<T> subjects)
{
return subjects.HasDuplicates(EqualityComparer<T>.Default);
}
public static bool HasDuplicates<T>(this IEnumerable<T> subjects, IEqualityComparer<T> comparer)
{
...
}
aber nicht ganz sicher, wie eine intelligente Umsetzung wäre es ...
Jetzt sehen * das * ist ziemlich clever ... wird versuchen, dass man aus! – Svish
Das könnte praktisch sein ... Ich glaube nicht, dass HashSet im kompakten Framework unterstützt wird, aber ... grrrrr. –
Sie können das gleiche mit 'Dictionary < T, K >' tun, aber es ist ein bisschen weniger Speicher effizient. 'Dictionary < T, K > .Add' gibt kein' bool' zurück, aber seine 'Count'-Eigenschaft wäre trivial schnell auf Kosten von ein paar Zeilen mehr Code zu überprüfen. –