In Ruby sind Arrays geordnete, ganzzahlig indizierte Sammlungen beliebiger Objekte.
Die Indizierung von Arrays beginnt bei 0.
Ein negativer Index wird relativ zum Ende des Arrays interpretiert. Ein Index von -1 gibt zum Beispiel das letzte Element des Arrays an, -2 das vorletzte Element und so weiter.
Arrays werden normalerweise mit der []-Notation erstellt.
Sie können Objekte ganz unterschiedlicher Typen enthalten.
array = [1, "two", 3.0]
Mit der Methode #[] kannst du Elemente eines Arrays über ihre Indizes abrufen.
Sie gibt das Element am angegebenen Index zurück oder ein Teilarray, das beim Startindex beginnt und über eine bestimmte Länge weitergeht.
Negative Indizes zählen vom Ende des Arrays rückwärts.
a = [ "a", "b", "c", "d", "e" ]
a[2] #=> "c"
a[6] #=> nil
a[1, 3] #=> [ "b", "c", "d" ]
a[-1] #=> "e"
a[-2] #=> "d"
a[-3, 2] #=> ["c", "d"]
Arrays haben viele nützliche Hilfsmethoden. Hier sind einige der gebräuchlichsten:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.size #=> 8
fibonacci.sum #=> 33
fibonacci.reverse #=> [13, 8, 5, 3, 2, 1, 1, 0]
Anstatt mit Schleifen durch Sammlungen zu iterieren, verwenden wir in Ruby die Aufzählung.
Beim Aufzählen gehst du eine Sammlung (in diesem Fall ein Array) durch und führst für jedes Objekt eine Aktion aus. Die Aufzählung ist ein zentrales Konzept in Ruby und wird unter anderem zum Sortieren, Gruppieren, Abbilden und Reduzieren verwendet.
Eine Aufzählung, die jedes Wort in einem Array ausgibt, sieht so aus:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
In diesem Beispiel haben wir die Methode .each auf unserem Array aufgerufen und einen Block übergeben, der einen Parameter (word) entgegennimmt und ihn ausgibt.
Wir schauen uns Blöcke später im Track noch viel genauer an, aber für den Moment kannst du sie dir als anonyme Funktionen vorstellen, die null oder mehr Argumente entgegennehmen können.
Sie können mit der do...end-Syntax (oben) oder der {}-Syntax (unten) definiert werden.
Hier sind einige weitere Beispiele für Array-Methoden, die Blöcke verwenden:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.count { |number| number == 1 } #=> 2
fibonacci.any? { |number| number == 6 } #=> false
fibonacci.select { |number| number.odd? } #=> [1, 1, 3, 5, 13]
fibonacci.all? { |number| number < 20 } #=> true
fibonacci.map { |number| number * 2 } #=> [0, 2, 2, 4, 6, 10, 16, 26]
Du bist ein begeisterter Vogelbeobachter und notierst, wie viele Vögel in den letzten sieben Tagen deinen Garten besucht haben.
Du hast fünf Aufgaben, die sich alle mit der Anzahl der Vögel beschäftigen, die deinen Garten besucht haben.
Zum Vergleich bewahrst du immer eine Kopie der Zählungen der letzten Woche in der Nähe auf, und zwar: 0, 2, 5, 3, 7, 8 und 4. Implementiere die Methode BirdCount.last_week, die die Zählungen der letzten Woche zurückgibt:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
Implementiere die Methode BirdCount#yesterday, die zurückgibt, wie viele Vögel gestern deinen Garten besucht haben. Die Vogelzählungen sind nach Tagen geordnet, wobei das erste Element die Zählung des ältesten Tages ist und das letzte Element die Zählung von heute.
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
Implementiere die Methode BirdCount#total, die die Gesamtzahl der Vögel zurückgibt, die deinen Garten besucht haben:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
Manche Tage sind geschäftiger als andere. Ein geschäftiger Tag ist ein Tag, an dem fünf oder mehr Vögel deinen Garten besucht haben.
Implementiere die Methode BirdCount#busy_days, die die Anzahl der geschäftigen Tage zurückgibt:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
Implementiere die Methode BirdCount#day_without_birds?, die true zurückgibt, wenn es einen Tag gab, an dem null Vögel den Garten besucht haben; andernfalls gibt sie false zurück:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.