the beauty of each_with_index 13. Jun 2008

Zum iterieren auf Arrays bietet Ruby den each-Iterator an. Das ist praktisch und erhöht die Lesbarkeit des Quelltextes.

letters = ['a','b','c']

letters.each do |letter|
   print "#{letter}\n"
end

Der Nachteil des each-Iterators im Gegensatz zur klassischen For-Schleife ist aber, dass einem nun nicht mehr die Laufvariable zur Verfügung steht. Wenn man dieses doch mal braucht, dann wird es sehr unschön.

i = 0
letters.each do |letter|
  print "#{letter}#{i}\n"
  i += 1
end

Als Ersatz bietet sich der times-Iterator an, wirklich schön ist das aber auch nicht, da nun das Array wieder explizit referenziert werden muss.

letters.size.times do |i|
  print "#{letters[i]}#{i}\n"
end

Das ist die Stelle wo der each_with_index-Iterator glänzen kann. Der liefert nämlich genau das, was er verspricht. Hier hat man gewissermaßen best of both worlds.

letters.each_with_index do |letter, i|
  print "#{letter}#{i}\n"
end
 

Kommentar schreiben

Markdown Syntax