Was man mit Arrays machen kann |
|
Hashes |
Nun zu den coolsten Fähigkeiten von Ruby: Iteratoren .
Ein Iterator ist eine spezielle Art von Methode. Es ist eine Methode, die Sie auf Einträge zugreifen lässt, eins nach dem anderen.
Arrays sind nicht die einzigsten Objekte, die Iteratoren besitzen, aber sie sind einige der wichtigsten. Iteratoren versucht man sich am besten anhand von Beispielen klarzumachen. Hier benutzen wir Array#each:
freunde = ["Jim", "Jeff", "Tim", "Rob"] freunde.each do |freund| puts "Ich habe einen Freund, der " + freund + " heißt" end |
Das ergibt:
Ich habe einen Freund, der Jim heißt Ich habe einen Freund, der Jeff heißt Ich habe einen Freund, der Tim heißt Ich habe einen Freund, der Rob heißt |
Der aufmerksame Student würde jetzt vielleicht merken, dass dies sehr der ersten Schleife ähnelt, die ich Ihnen gezeigt habe. Der einen der Form n.times do .... Das ist tatsächlich ein Iterator. Und er läßt Sie über die ganzen Zahlen von 0 bis n-1 iterieren:
4.times do |zahl| puts zahl end |
Das ergibt:
0 1 2 3 |
Die Tatsache, dass mit 0 angefagen wird zu zählen, scheint merkwürdig zu sein. Aber das stimmt mit den Arrays überein (bei denen der Index auch mit 0 beginnt). Deshalb kann man den Code:
freunde = ["Jim", "Jeff", "Tim", "Rob"] freunde.each do |freund| puts "Ich habe einen Freund, der " + freund + " heißt" end |
Auch so umschreiben:
# 'i' ist eine Standardnotation für 'index'. 4.times do |i| puts "Ich habe einen Freund, der " + freunde[i] + " heißt" end |
Und nun was cooles: Erinnern Sie sich an die Methode Array#length ? Wie wärs mit:
freunde.length.times do |i| # 'i' für 'index'. puts "Ich habe einen Freund, der " + freunde[i] + "heißt" end |
Stellen Sie sich vor, Sie möchten nun nicht alle Freunde ausgeben. Wir wollen nur jeden zweiten Freund ausgeben. Wir können nur die Freunde ausgeben, die einen geraden Index haben. Wir können dies mit der Methode Integer#% (Rest nach Division) machen.
freunde.length.times do |i| # Gib nur gerade Indizes aus (z.B. Rest bei Divsion durch 2 gleich 0). if i % 2 == 0 puts "Ich habe einen Freund, der " + freunde[i] + " heißt" end end |
Das gibt aus:
Ich habe einen Freund, der Jim heißt Ich habe einen Freund, der Tim heißt |
Wir wollen nun alle Freunde in alphabetischer Reihenfolge ausgeben:
freunde.sort.each do |freund| puts "Ich habe einen Freund, der " + freund + "heißt" end |
Das ergibt:
Ich habe einen Freund, der Jeff heißt Ich habe einen Freund, der Jim heißt Ich habe einen Freund, der Rob heißt Ich habe einen Freund, der Tim heißt |
Geben Sie den ganzen Inhalt von freunde in umgekehrter alphabetischer Reihenfiolge aus.
Nehmen wir an Sie haben das Array:
namen = [ "daniel", "eduardo", "alejandro", "enrique" ] |
Benutzen Sie String#capitalize, um die Namen groß zu schreiben.
Was man mit Arrays machen kann |
|
Hashes |