Rubyイテレータの知識まとめ
要するに、イテレートとは同じことを何度も繰り返すという意味なので、イテレータは同じことを何度も繰り返すために使われるのです。
イテレータは、コレクションがサポートするメソッドです。データ・メンバーのセットを保存するオブジェクトをコレクションと呼びます。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の他の関連記事もご覧ください!
関連
-
最新のCocoaPodsインストールチュートリアル
-
Rubyを使ったFTPパスワードクラッキング
-
Ruby on Railsフレームワークの設計構造をMVCマインドで理解する
-
Rubyのシングルトンメソッドとシングルトンクラス
-
Windowsでrubyとrailsをインストールする際に発生する問題点まとめ
-
Ruby on RailsのWebプロジェクト構築のためのシンプルガイド
-
RubyのProcクラスとProc.newメソッドの使用法
-
Rubyのデザインパターンプログラミングにおけるコマンドパターンの活用を徹底分析
-
Rubyのデザインパターン。プログラミングにおけるアピアランスパターンの応用
-
Builderビルダーパターンを用いたRubyデザインパターンプログラミング例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン