Die Programmiersprache Ruby (German Edition)
ist ein explizit benannter Alias
# Die Vereinigungsmenge ist das Set von Werten, die mindestens in einem von beiden
# Sets vorhanden sind.
primes | odds # => #
primes.union(odds) # Explizit benannter Alias
# a-b: die Elemente von a, die nicht auch in b sind
primes-odds # => #
odds-primes # => #
primes.difference(odds) # Methoden-Alias
# a^b: Set mit Werten, die in einem Set, aber nicht in beiden zu finden sind: (a|b)-(a&b)
primes ^ odds # => #
Die Klasse
Set
definiert auch verändernde Varianten einiger dieser Methoden, die wir in Kürze behandeln werden.
9.5.4.3 Hinzufügen und Entfernen von Setelementen
Dieser Abschnitt beschreibt Methoden, die einem Set Elemente hinzufügen oder sie aus ihm entfernen. Es handelt sich um verändernde Methoden, die das Zielset direkt bearbeiten, statt eine veränderte Kopie zurückzugeben. Da diese Methoden nicht in nicht verändernden Versionen existieren, haben sie keine Ausrufezeichen am Ende.
Der Operator
<<
fügt einem Set ein einzelnes Element hinzu:
s = Set[] # Beginne mit einem leeren Set
s << 1 # => #
s.add 2 # => #: add ist ein Synonym für <<
s << 3 << 4 << 5 # => #: kann verkettet werden
s.add 3 # => #: nicht verändert
s.add? 6 # => #
s.add? 3 # => nil: das Set wurde nicht verändert
Um einem Set mehr als einen Wert hinzuzufügen, verwenden Sie die Methode
merge
, die ein beliebiges enumerierbares Objekt als Argument erwartet.
merge
ist im Endeffekt eine verändernde Version der Methode
union
:
s = (1..3).to_set # => #
s.merge(2..5) # => #
Um ein einzelnes Element aus einem Set zu entfernen, verwenden Sie
delete
oder
delete?
, die analog zu
add
und
add?
funktionieren, aber ein Operatoräquivalent besitzen:
s = (1..3).to_set # => #
s.delete 1 # => #
s.delete 1 # => #: unverändert
s.delete? 1 # => nil: liefert nil zurück, wenn es keine Änderung gab
s.delete? 2 # => #: gib ansonsten Set zurück
Entfernen Sie mehrere Werte auf einmal aus einem Set mit der Methode
subtract
. Das Argument dieser Methode kann ein beliebiges enumerierbares Objekt sein, und die Methode verhält sich wie eine verändernde Version der Methode
difference
:
s = (1..3).to_set # => #
s.subtract(2..10) # => #
Um Elemente selektiv aus einem Set zu entfernen, nutzen Sie
delete_if
oder
reject!
. Wie bei den
Array
- und
Hash
-Klassen sind diese beiden Methoden bis auf den Rückgabewert gleich, den sie liefern, wenn das Set nicht verändert wurde.
delete_if
gibt immer das Zielset zurück.
reject!
gibt das Zielset zurück, wenn es verändert wurde, oder
nil
, wenn kein Wert entfernt wurde:
primes = Set[2, 3, 5, 7] # Set mit Primzahlen
primes.delete_if {|x| x%2==1} # => #: entferne ungerade Zahlen
primes.delete_if {|x| x%2==1} # => #: unverändert
primes.reject! {|x| x%2==1} # => nil: unverändert
# Schnittmenge direkt im Set bilden
s = (1..5).to_set
t = (4..8).to_set
s.reject! {|x| not t.include? x} # => #
Schließlich arbeiten die Methoden
clear
und
replace
genauso wie für Arrays und Hashes:
s = Set.new(1..3) # Initiales Set
s.replace(3..4) # Ersetze alle Elemente; Argument ist enumerierbar
s.clear # => #
s.empty? # => true
9.5.4.4 Setiteratoren
Sets sind
Enumerable
und die Klasse
Set
definiert einen Iterator
each
, der alle Elemente des Sets nacheinander ausgibt. In Ruby 1.9 verhält sich
Set
wie die Klasse
Hash
, mit der es implementiert ist, und iteriert Elemente in der Reihenfolge, in der sie eingefügt wurden. Vor Ruby 1.9 ist die Iterationsreihenfolge unbestimmt. Bei
SortedSet
werden die Elemente in aufsteigend sortierter Reihenfolge ausgegeben. Zudem wandelt der Iterator
map!
jedes Element des Sets mit einem Block um und verändert das Set selbst.
collect!
ist ein Synonym dafür:
s = Set[1, 2, 3, 4, 5] # => #
s.each {|x| print x } # Ausgabe "51234": vor Ruby 1.9 keine feste Reihenfolge
s.map! {|x| x*x } # => #
s.collect! {|x| x/2 } # => #
9.5.4.5 Verschiedene Setmethoden
Set
definiert mächtige Methoden zum Aufteilen von Sets in Subsets und für das Flachklopfen von Sets mit Subsets zu einzelnen, größeren Sets. Zusätzlich definiert es ein paar Brot-und-Butter-Methoden, die wir zuerst behandeln
Weitere Kostenlose Bücher