Set ist eine ungeordnete Sammlung einzigartiger Elemente, die als Hashtabelle implementiert ist. Das Hauptunterscheidungsmerkmal zu Array ist das Fehlen von Duplikaten und die Unordnung. Die wichtigsten Schnittstellen: Einfügemethoden (insert), Löschmethoden (remove), Vorhandeneheitsprüfung (contains).
Ausführungszeiten:
insert, remove und contains funktionieren im Durchschnitt in O(1).Beispiel für die Verwendung:
var numbers: Set<Int> = [1, 2, 3] numbers.insert(4) // Set: 1, 2, 3, 4 numbers.insert(2) // Set bleibt unverändert, 2 ist bereits vorhanden numbers.remove(1) // Set: 2, 3, 4 print(numbers.contains(3)) // true
Verwenden Sie Set, wenn Einzigartigkeit wichtig ist, aber die Reihenfolge unerheblich ist. Vergleichen Sie mit Array:
Array erfolgt in O(n).Array sind gleiche Werte erlaubt.Set unterstützt: ∪, ∩, −, ⊆, ⊇ und andere mengentheoretische Operationen.
Frage:
Wird der folgende Code kompiliert und warum?
let set: Set = [[1, 2], [3, 4]]
Antwort:
Nein, wird er nicht. Set erfordert, dass der Typ der Elemente dem Protokoll Hashable entspricht. Ein Array (Array) implementiert nicht Hashable, daher kann man keine Mengen von Arrays direkt erstellen. Beispielsweise ist Set<Int> korrekt, während Set<[Int]> nicht korrekt ist.
Geschichte
In einem Dienst speicherten Entwickler eindeutige Objekt-IDs als [Int] anstelle von Set<Int>. Dies führte zu Problemen: Vorhandeneheitsprüfungen und Löschungen funktionierten langsam (Zeit — O(n)), es traten Duplikate auf, und die Geschäftslogik wurde verletzt.
Geschichte
Der Versuch, nicht standardisierte Typen in Set zu setzen (zum Beispiel wurde Set<MyModel> erstellt), aber der Typ implementierte nicht Hashable. Der Code wurde nur nach dem Hinzufügen der entsprechenden Protokolle kompiliert, aber bei der Implementierung von Fehlern in hash(into:) traten Kollisionen und unvorhersehbares Verhalten während der Ausführung auf.
Geschichte
Ein Entwickler erwartete, dass die Reihenfolge der Elemente in Set mit der Reihenfolge der Einfügungen übereinstimmte und gestaltete die UI in derselben Reihenfolge. Infolgedessen war die Reihenfolge bei jedem Start unterschiedlich, was zu inkonsistenten Datenanzeigen beim Endbenutzer führte.