<- Was man mit Arrays machen kann
Hashes ->

Iteratoren

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
                       

Übungen

  1. Geben Sie den ganzen Inhalt von freunde in umgekehrter alphabetischer Reihenfiolge aus.

  2. 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 ->