Die Programmiersprache Ruby

Blog| Forum| Wiki  

Klasse Array
erbt von: Object
includiert: Enumerable

In einem Array werden verschiedene Daten zu einer Gruppe zusammengefasst. Im Gegensatz zu vielen anderen Programmiersprachen schreibt Ruby den Typ des Arrays nicht vor (Duck Typing), sondern erlaubt alle Klassen in ihm. Jedes Array beginnt am Index 0 und ist von da an aufsteigend nummeriert, irritierend vielleicht dann, wenn man mithilfe von z.B. Array#length das letzte Element eines Arrays abrufen möchte, da dieses mit 1 zu zählen anfängt; eine Länge von 0 würde ein leeres Array bedeuten. Anders als Hashes sind Arrays in jedem Fall sortiert.

Inhaltsverzeichnis

Erstellung

Ein Array kann auf verschiedene Weise erstellt werden:

1
2
3
4
5
6
7
8
# Mit der Methode Array.new(Anzahl, Objekt)
ary = Array.new(7, "text")
# Kurzschreibweise mit eckigen Klammern
ary = [1, "zwei", (1..3)]
# Aufrufen der Methode Array.[]
ary = Array[1, "zwei", (1..3)]
# Au��erdem unterst��tzen viele Objekte die Methode #to_a
ary = (1..3).to_a


Abrufen von Elementen

Ein Element kann am einfachsten mithilfe der Methode Array#[] ausgelesen werden. Diese akzeptiert sowohl eine einzelne Zahl als Index, einen Bereich in Form eines Ranges oder Start-End-Angaben oder auch einen negativen Index, der als von hinten zählend gewertet wird.

1
2
3
4
5
ary = [:e1, "e2", 3]
p ary[0] #=> :e1
p ary[0, 2] #=> [:e1, "e2"] #Achtung: Das ist keine Startpunkt-Endpunkt-Angabe, sondern Startpunkt + Differenz
p ary[0..1] #=> [:e1, "e2"]
p ary[-1] #=> 3

Daneben gibt es noch die Methode Array#slice!, die das angegebene Element wortwörtlich aus dem Array »herausholt«:

1
2
3
ary = ["A", "B", "C"]
puts ary.slice!(1) #=> B
p ary #=> ["A", "C"]


Automatische Verwendung von Arrays

An einigen Stellen werden Arrays auch mehr oder minder auffällig benutzt, zum Beispiel bei der gleichzeitigen Zuweisung mehrerer Variablen:

1
2
3
a, b = 1, 2
#Entspricht
a, b = [1, 2]

Wenn eine Methode mit einer variablen Argumentanzahl definiert werden soll, werden die Argumente als Array übergeben.

1
2
3
4
def x(*y)
  p y
end
x(1, 2, 3) #=> [1, 2, 3]


Splat

Man kann ein Array für bestimmte Zwecke mithilfe des Splat-Operators * in seine Einzelteile aufspalten.

1
2
3
4
5
6
7
8
9
10
11
ary = [1, 2, 3]
def methode(x, y, z)
  puts x
  puts y
  puts z
end
methode(ary) #=> ArgumentError
methode(*ary)
#=> 1
#=> 2
#=> 3


Mathematisch

Arrays sind für Berechnungen an mathematischen Mengen und Matrizen nicht unbedingt geeignet; dafür sollte man eher eine der Klassen Set oder Matrix verwenden, je nach Bedarf (so garantiert Set etwa die Einmaligkeit von Zahlen). Zwar kann man auch mit Arrays rechnen, aber die Ergebnisse können unerwartet sein:

1
2
3
4
5
6
7
ary1 = [1, 2, 3]
ary2 = [4, 5, 6]
ary3 = ary1 + ary2
#Das Ergebnis ist NICHT [5, 7, 9]
p ary3 #=> [1, 2, 3, 4, 5, 6]
ary4 = [3, 4]
p ary3 - ary4 #=> [1, 2, 5, 6]


Siehe auch