Die Programmiersprache Ruby (German Edition)
linken Seite einer Wertzuweisung kann ein Teil-Array durch die Elemente des Array auf der rechten Seite ersetzt werden. Diese Basisoperation kann auch zum Einfügen und Löschen dienen:
a[0,2] = ['A', 'B'] # a wird ['A', 'B', 'c', 'd', 'e']
a[2...5]=['C', 'D', 'E'] # a wird ['A', 'B', 'C', 'D', 'E']
a[0,0] = [1,2,3] # Elemente am Anfang von a einfügen
a[0..2] = [] # Diese Elemente löschen
a[-1,1] = ['Z'] # Das letzte Element durch ein anderes ersetzen
a[-1,1] = 'Z' # Für einzelne Elemente ist das Array optional
a[-2,2] = nil # Letzte 2 Elemente löschen in 1.8; durch nil ersetzen in 1.9
Neben den eckigen Klammern, dem Index-Operator, definiert die Klasse
Array
eine Reihe weiterer nützlicher Operatoren. Verwenden Sie
+
, um zwei Arrays zu verknüpfen:
a = [1, 2, 3] + [4, 5] # [1, 2, 3, 4, 5]
a = a + [[6, 7, 8]] # [1, 2, 3, 4, 5, [6, 7, 8]]
a = a + 9 # Fehler: rechte Seite muss ein Array sein
Der Operator
-
zieht ein Array von einem anderen ab. Er erzeugt zunächst eine Kopie des linken Array und entfernt dann sämtliche Elemente aus dieser Kopie, die irgendwo im rechten Array vorkommen:
['a', 'b', 'c', 'b', 'a'] - ['b', 'c', 'd'] # ['a', 'a']
Der Operator
+
erzeugt ein neues Array, das die Elemente seiner beiden Operanden enthält. Verwenden Sie
<<
, um Elemente am Ende eines existierenden Array einzufügen:
a = [] # Mit einem leeren Array beginnen
a << 1 # a ist [1]
a << 2 << 3 # a ist [1, 2, 3]
a << [4,5,6] # a ist [1, 2, 3, [4, 5, 6]]
Genau wie die Klasse
String
verwendet auch
Array
den Multiplikationsoperator für Wiederholungen:
a = [0] * 8 # [0, 0, 0, 0, 0, 0, 0, 0]
Die Klasse
Array
borgt sich die Boolean-Operatoren
|
und
&
aus und verwendet sie für Vereinigungs- beziehungsweise Schnittmenge.
|
verknüpft seine Argumente und entfernt dann sämtliche doppelt vorkommenden Elemente aus dem Ergebnis.
&
gibt ein Array zurück, das diejenigen Elemente enthält, die in beiden Operanden-Arrays vorkommen. Das zurückgegebene Array enthält keine doppelten Elemente:
a = [1, 1, 2, 2, 3, 3, 4]
b = [5, 5, 4, 4, 3, 3, 2]
a | b # [1, 2, 3, 4, 5]: Duplikate werden entfernt
b | a # [5, 4, 3, 2, 1]: Dieselben Elemente, aber andere Reihenfolge
a & b # [2, 3, 4]
b & a # [4, 3, 2]
Beachten Sie, dass diese Operatoren nicht transitiv sind:
a|b
ist beispielsweise nicht dasselbe wie
b|a
. Wenn Sie die Reihenfolge der Elemente jedoch außer Acht lassen und die Arrays als ungeordnete Mengen betrachten, erscheinen diese Operatoren sinnvoller. Beachten Sie auch, dass der Algorithmus zur Berechnung von Vereinigungs- und Schnittmenge nicht festgelegt ist, so dass es keine Garantie bezüglich der Reihenfolge der Elemente in den zurückgegebenen Arrays gibt.
Die Klasse
Array
definiert eine ganze Menge nützlicher Methoden. Die einzige, die wir hier besprechen, ist der Iterator
each
, der als Schleife über die Elemente eines Array verwendet wird:
a = ('A'..'Z').to_a # Mit einem Array von Buchstaben beginnen
a.each {|x| print x } # Das Alphabet buchstabenweise ausgeben
Weitere Array-Methoden, die Sie nachschlagen sollten, sind
clear
,
compact!
,
delete_if
,
each_index
,
empty?
,
fill
,
flatten!
,
include?
,
index
,
join
,
pop
,
push
,
reverse
,
reverse_each
,
rindex
,
shift
,
sort
,
sort!
,
uniq!
und
unshift
.
Wir werden den Arrays wieder begegnen, wenn wir parallele Wertzuweisungen in „4.5.5 Parallele Wertzuweisung“ und Methodenaufrufe in Kapitel 6 behandeln. Und in „9.5.2 Arrays“ werden wir die
Array
-API detailliert untersuchen.
3.4 Hashes
Ein Hash ist eine Datenstruktur, die eine Menge von Objekten namens Schlüssel (Keys) verwaltet und jedem Schlüssel einen Wert zuordnet. Deshalb werden Hashes auch als Maps (Zuordnungen) bezeichnet. Sie werden manchmal als assoziative Arrays bezeichnet, da sie mit jedem Schlüssel einen Wert assoziieren, so dass man sie auch als Arrays verstehen kann, deren Index ein beliebiges Objekt statt eines Integers sein kann. Ein Beispiel macht das deutlicher:
# Dieser Hash ordnet die Namen von Ziffern den Ziffern selbst zu
numbers = Hash.new # Ein neues, leeres Hash-Objekt erzeugen
numbers["eins"] = 1 # Den String "eins" der Fixnum 1 zuordnen
numbers["zwei"] = 2 # Beachten Sie: Wir verwenden hier Array-Notation
numbers["drei"] = 3
sum = numbers["drei"] + numbers["zwei"] # Werte auf diese Weise ermitteln
Diese Einführung in Hashes dokumentiert die Ruby-Syntax für Hash-Literale und erläutert die Anforderungen an ein Objekt, das als Hash-Schlüssel verwendet werden soll. Weitere
Weitere Kostenlose Bücher