Entschuldige die neue Frage. Könnte mir jemand helfen? Einfaches Array hier. Was ist die beste / einfachste Methode, um zu überprüfen, ob alle Benutzereingaben eindeutig und nicht doppelt sind? Danke
%Vor%}
Ich hätte hinzufügen sollen, dass ich überprüfen muss, bevor die Zahlen ausgegeben werden. Danke
Ein anderer Ansatz ist die Verwendung von HashSet<string>
:
oder mit Enumerable.All
:
Enunmerable.All
ist effizienter, wenn die Sequenz sehr groß ist, da sie nicht erstellt wird Das Set wird komplett aber nacheinander gesetzt und liefert false
, sobald es ein Duplikat entdeckt.
Hier ist eine Demo dieses Effekts: Ссылка
HashSet
Konstruktorspeicherverbrauch: 50 MB, Dauer: 00: 00: 00.2962615 Enumerable.All
Speicherverbrauch: 0 MB, Dauer: 00: 00: 00.0004254 msdn
Die Klasse
HashSet<T>
bietet leistungsstarke Set-Operationen. Ein Set ist eine Sammlung, die keine doppelten Elemente enthält und deren Elemente sind in keiner bestimmten Reihenfolge.
Der einfachste Weg wäre meiner Meinung nach, alle Werte innerhalb einer Menge einzufügen und dann , ob seine Größe der Größe des Arrays entspricht . Ein Satz kann keine doppelten Werte enthalten. Wenn ein Wert doppelt ist, wird er nicht in den Satz eingefügt.
Dies ist auch in der Komplexität in Ordnung, wenn Sie nicht Millionen von Werten haben, da die Einfügung in eine Menge in O(logn)
-Zeit erfolgt, so dass die Gesamtprüfzeit O(nlogn)
ist.
Wenn Sie etwas Optimales in der Komplexität wollen, können Sie dies in O(n)
time tun, indem Sie das Array durchlaufen und jeden gefundenen Wert in eine Hash-Map übernehmen und den Wert erhöhen: if value doesn Wenn Sie in set nicht vorhanden sind, fügen Sie es mit count = 1 hinzu. Wenn es vorhanden ist, erhöhen Sie seine Anzahl.
Dann gehen Sie durch die Hash-Map und prüfen, ob alle Werte eine Zahl von haben.
Wenn Sie nur versuchen, sicherzustellen, dass Ihre Listbox keine Duples enthält, verwenden Sie Folgendes:
%Vor%Tags und Links arrays c# duplicates