![]() |
|||||
対象: 配列、ハッシュに対する繰り返し(イテレータ)配列やのハッシュの各要素に対する繰り返し処理ではイテレータを利用する場面が多いだろう。実際、Rubyでスクリプトを書いていても、通常のeachメソッドに加えてeach_with_indexメソッドも利用できるので、forを使う事はあまりなくなる。もっとも、各人の書き方や趣味にもよるであろうが。 forやwhile等の書き方はこちらを参照していただきたい。 each配列やハッシュの各要素に対する繰り返し処理は、イテレータを使うと簡単に書ける。具体的には配列やハッシュに対してeachメソッドと繰り返し処理のブロックを使う。次の例では1~10までの要素を持つ配列aの、すべての要素の合計を求める処理である。 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sum = 0 a.each do |n| sum += n end p sum 55 配列aの各要素は、ブロックにnとして渡され、その中でnを用いて何らかの処理を書く。上記の例ではブロックが実行される度にsumにnを加算している。 また、[]を使って処理対象の要素を限定することもできる。例えば処理対象を0番目からではなく1番目から処理したいとか、3番目までを処理したい等である。最後の要素は-1で表せる。 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sum = 0 # 5番目の要素から最後の要素までを処理 a[5..-1].each do |n| sum += n end p sum 40 ハッシュの場合、イテレータを使うとブロックでkeyとvalueの両方を得られるので、それを使った処理を記述できる。 h = {'a' => 10, 'b' => 20, 'c' => 30} h.each do |key, value| print "#{key}の値は#{value}です。\n" end aの値は10です。 bの値は20です。 cの値は30です。 each_with_indexeach_with_indexメソッドを使うと、ブロックの中で配列の要素に加えてインデックスも得られるので、他の配列等と連動した処理を行う場合に便利である。インデックスは0から始まる。 a = ["apple", "orange", "banana"] a.each_with_index do |n, i| print "#{n}は#{i}番目の要素です\n" end appleは0番目の要素です orangeは1番目の要素です bananaは2番目の要素です each_with_indexはハッシュに対してももちろん使える。が、1つだけ重要なポイントがある。 h = {'a' => 10, 'b' => 20, 'c' => 30} h.each_with_index do |(key, value), i| print "#{i}回目の処理: #{key}の値は#{value}です。\n" end それはハッシュの場合、上記のようにkey, valueのペアは()で括ってやる必要がある。 0回目の処理: aの値は10です。 1回目の処理: bの値は20です。 2回目の処理: cの値は30です。 (2010/04/08)
Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]
|