Rubyイテレータ
簡単に言うと、反復(イテレーション)とは同じことを繰り返し行うことを指します。そのため、同じことを複数回繰り返すにはイテレータ(反復子)が使用されます。
イテレーターは、コレクションによってサポートされるメソッドです。データ メンバーのセットを格納するオブジェクトはコレクションと呼ばれます。 Ruby では、配列とハッシュをセットと呼ぶことができます。
Iterator は、コレクションのすべての要素を順番に返します。ここでは、each と collect という 2 種類のイテレータについて説明します。
Ruby each イテレータ
each イテレータは、配列またはハッシュのすべての要素を返します。
構文
collection.each do |variable| code end
は、コレクション内の各要素に対してコードを実行します。ここで、コレクションは配列またはハッシュにすることができます。
Example
#!/usr/bin/ruby ary = [1,2,3,4,5] ary.each do |i| puts i end
上記の例の出力結果は次のとおりです:
1 2 3 4 5
each イテレータは常にブロックに関連付けられます。配列の各値をブロックに順番に返します。値は変数 i に保存され、画面に表示されます。
Ruby collect Iterator
collect Iterator は、コレクションのすべての要素を返します。
構文
collection = collection.collect
collect メソッドは、常にブロックに関連付けられている必要はありません。 collect メソッドは、配列かハッシュかに関係なく、コレクション全体を返します。
Example
#!/usr/bin/ruby a = [1,2,3,4,5] b = Array.new b = a.collect{ |x|x } puts b
上記の例の出力結果は次のとおりです:
1 2 3 4 5
注: collect メソッドは、配列間でコピーする正しい方法ではありません。ある配列を別の配列にコピーするcloneと呼ばれる別のメソッドがあります。
新しい配列を取得するために各値に対して何らかの操作を実行する場合は、通常、collect メソッドを使用します。たとえば、次のコードは、a の各値を 10 倍した値を持つ配列を生成します。
#!/usr/bin/ruby a = [1,2,3,4,5] b = a.collect{|x| 10*x} puts b
上記の例の出力結果は次のとおりです:
10 20 30 40 50