class Set

Die Klasse Set implementiert eine Sammlung von ungeordneten Werten ohne Duplikate. Sie ist eine Mischung aus den intuitiven Interaktionsmöglichkeiten von Array und der schnellen Suche von Hash.

Set ist einfach mit Enumerable-Objekten (die each implementieren) zu verwenden. Die meisten Initialisierungsmethoden und binären Operatoren akzeptieren generische Enumerable-Objekte neben Sets und Arrays. Ein Enumerable-Objekt kann mit der Methode to_set in ein Set konvertiert werden.

Set verwendet eine Datenstruktur, die der von Hash ähnelt, für die Speicherung, außer dass sie nur Schlüssel und keine Werte hat.

Vergleich

Die Vergleichsoperatoren <, >, <= und >= werden als Abkürzung für die Methoden {proper_,}{subset?,superset?} implementiert. Der Operator <=> spiegelt diese Reihenfolge wider oder gibt nil für Sets zurück, die beide unterschiedliche Elemente haben (z. B. {x, y} vs. {x, z}).

Beispiel

s1 = Set[1, 2]                        #=> Set[1, 2]
s2 = [1, 2].to_set                    #=> Set[1, 2]
s1 == s2                              #=> true
s1.add("foo")                         #=> Set[1, 2, "foo"]
s1.merge([2, 6])                      #=> Set[1, 2, "foo", 6]
s1.subset?(s2)                        #=> false
s2.subset?(s1)                        #=> true

Kontakt

Von Set erben

Vor Ruby 4.0 (veröffentlicht im Dezember 2025) hatte Set eine andere, weniger effiziente Implementierung. Es wurde in C neu implementiert und das Verhalten einiger Kernmethoden wurde angepasst.

Um die Abwärtskompatibilität zu gewährleisten, wird beim Erben einer Klasse von Set das zusätzliche Modul Set::SubclassCompatible eingebunden, das das Verhalten der geerbten Klasse sowie interne Methodennamen näher an das vor Ruby 4.0 heranbringt.

Dies ist zum Beispiel leicht an dem Verhalten der Methode inspect zu erkennen.

p Set[1, 2, 3]
# prints "Set[1, 2, 3]"

class MySet < Set
end
p MySet[1, 2, 3]
# prints "#<MySet: {1, 2, 3}>", like it was in Ruby 3.4

Für neuen Code, wenn Abwärtskompatibilität nicht erforderlich ist, wird empfohlen, stattdessen von Set::CoreSet zu erben, was die Einbindung der „Kompatibilitätsschicht“ vermeidet.

class MyCoreSet < Set::CoreSet
end
p MyCoreSet[1, 2, 3]
# prints "MyCoreSet[1, 2, 3]"

Methoden von Set

Zunächst, was woanders ist. Klasse Set

Insbesondere hat die Klasse Set selbst nicht viele Methoden zum Abrufen oder Iterieren. Stattdessen verlässt sie sich auf die von Enumerable.

Hier stellt die Klasse Set nützliche Methoden bereit für

Methoden zum Erstellen eines Sets

Methoden für Set-Operationen

Methoden zum Vergleichen

Methoden zum Abfragen

Methoden zum Zuweisen

Methoden zum Löschen

Methoden zur Konvertierung

Methoden zur Iteration

Andere Methoden