A Rubyban a tömbök rendezett, egész számokkal indexelt gyűjtemények, amelyek bármilyen objektumot tartalmazhatnak.
A tömbök indexelése 0-tól indul.
A negatív index a tömb végétől számítva értendő. A -1 index például az utolsó elemre mutat, a -2 az utolsó előttire, és így tovább.
A tömböket általában a [] jelöléssel hozzuk létre.
Bármilyen típusú objektumot tartalmazhatnak.
array = [1, "two", 3.0]
A tömb elemeit az indexeik alapján kérhetjük le a #[] metódussal.
Ez visszaadja az adott indexű elemet, vagy egy altömböt ad vissza, amely a kezdőindexnél kezdődik és a megadott hosszon át tart.
A negatív indexek a tömb végétől visszafelé számolnak.
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"]
A tömbökön sok hasznos segédmetódus érhető el. Íme néhány a gyakoribbak közül:
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]
Ahelyett, hogy ciklusokkal iterálnánk végig a gyűjteményeken, a Rubyban felsorolást használunk.
A felsorolás során végiglépkedünk egy gyűjteményen (ebben az esetben egy tömbön), és valamilyen műveletet hajtunk végre minden objektumon. A felsorolás kulcsfontosságú fogalom a Rubyban, és olyan dolgokra használjuk, mint a rendezés, csoportosítás, leképezés, redukálás és még sok más.
Egy felsorolás, amely kiírja a tömb minden szavát, így néz ki:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
Ebben a példában a .each metódust hívtuk meg a tömbünkön, és átadtunk neki egy blokkot, amely egy paramétert (word) vesz át, és kiírja azt.
A blokkokat sokkal részletesebben is megvizsgáljuk majd később a kurzus során, egyelőre azonban gondolj rájuk úgy, mint névtelen függvényekre, amelyek nulla vagy több argumentumot vehetnek át.
A do...end szintaxissal (fent) vagy a {} szintaxissal (lent) definiálhatók.
Íme néhány további példa olyan tömbmetódusokra, amelyek blokkokat használnak:
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]
Szenvedélyes madárfigyelő vagy, aki számon tartja, hány madár járt a kertedben az elmúlt hét napban.
Öt részfeladat vár rád, és mindegyik azzal foglalkozik, hány madár járt a kertedben.
Az összehasonlítás kedvéért mindig magadnál tartod a múlt heti madárszámok másolatát, ezek pedig a következők voltak: 0, 2, 5, 3, 7, 8 és 4. Valósítsd meg a BirdCount.last_week metódust, amely visszaadja a múlt heti madárszámokat:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
Valósítsd meg a BirdCount#yesterday metódust, amely visszaadja, hány madár járt a kertedben tegnap. A madárszámok napok szerint vannak rendezve: az első elem a legrégebbi nap száma, az utolsó pedig a mai napé.
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
Valósítsd meg a BirdCount#total metódust, amely visszaadja, hogy összesen hány madár járt a kertedben:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
Néhány nap forgalmasabb, mint a többi. Forgalmas nap az, amikor öt vagy több madár járt a kertedben.
Valósítsd meg a BirdCount#busy_days metódust, amely visszaadja a forgalmas napok számát:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
Valósítsd meg a BirdCount#day_without_birds? metódust, amely true értéket ad vissza, ha volt olyan nap, amikor nulla madár járt a kertedben; egyébként pedig false értéket ad vissza:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ruby nyelvet 21 fogalom121 feladat segítségével, valódi emberi mentorálással, mindez ingyen.