1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Rubyイテレータの知識まとめ

2022-01-03 09:59:54

要するに、イテレートとは同じことを何度も繰り返すという意味なので、イテレータは同じことを何度も繰り返すために使われるのです。

イテレータは、コレクションがサポートするメソッドです。データ・メンバーのセットを保存するオブジェクトをコレクションと呼びます。Rubyでは、配列やハッシュもコレクションと呼ぶことができる。

イテレータは、コレクションの全要素を次々に返します。ここでは、eachとcollectという2種類のイテレータについて説明します。

Ruby の各イテレータ

eachイテレータは、配列やハッシュのすべての要素を返します。

構文

collection.each do |variable|
  code
end


コレクション内の各要素に対してコードを実行する。コレクションは配列またはハッシュである。

#! /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イテレータは、コレクションの全要素を返します。

構文

collection = collection.collect

collectメソッドは、必ずしもブロックと関連付ける必要はありません。collectは、配列であれハッシュであれ、コレクション全体を返します。

インスタンス

#! /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

補足

Java ではイテレータを使用するために Map を List 型のコンテナに変換する必要がありますが、Ruby では Map に対して直接イテレータが用意されています。

sum = 0
cutcome = {"block1" => 1000, "book2" => 1000, "book3" => 4000}
cutcome.each{|item, price| sum += price}
print "sum = " + sum.to_s

こんな風に見えることもあるんです。

sum = 0
cutcome = {"block1" => 1000, "book2" => 1000, "book3" => 4000}
cutcome.each{|pair| sum += pair[1]}
print "sum = " + sum.to_s

以上、Rubyのイテレータの知識をまとめてみました。Rubyのイテレータについてもっと知りたい方は、Script Houseの他の関連記事もご覧ください!