はじめに
勉強していると色々な種類のeachが出てきたので
忘れないように記していきます。
eachメソッド
1 . 配列や範囲オブジェクトなどに用意されているメソッドです。
オブジェクトに含まれている要素を取り出します。
fruits = [ "apple", "orange","banana"]
fruits.each do |fruit|
p fruit
end
#=>"apple"
# "orange"
# "banana"
2 . 配列のkeyとvalueを同時に取り出して使用したい場合は変数を2つ設定します。
fruits = { apple: 100, orange: 200, banana: 300}
fruits.each do |key, value|
puts "#{key}の値段は#{value}円です。"
end
#=>"appleの値段は100円です。"
# "orangeの値段は200円です。"
# "bananaの値段は300円です。"
下記のように記述することもできます。
(お好みで。長いブロックを書くときは前のような記述は⇧、コンパクトに書きたい場合は⇩)
fruits = { apple: 100, orange: 200, banana: 300}
fruits.each { |key, value| puts "#{key}の値段は#{value}円です。"}
#=>"appleの値段は100円です。"
# "orangeの値段は200円です。"
# "bananaの値段は300円です。"
each_keyメソッド
keyのみを取り出したい場合に使用します。
fruits = { apple: 100, orange: 200, banana: 300}
fruits.each_key {|key| p "#{key}の値段" }
#=>"appleの値段"
# "orangeの値段"
# "bananaの値段"
each_valueメソッド
valueのみを取り出したい場合に使用します。
fruits = { apple: 100, orange: 200, banana: 300}
fruits.each_value { |value| p "#{value}円"}
#=>"100円"
# "200円"
# "300円"
each_with_indexメソッド
1 . 配列の要素意外にindexの数字を使用したい場合に使用します。
fruits = [ "apple", "orange","banana"]
fruits.each_with_index do |a,i|
p "#{i}個の#{a}があります。"
end
#=>"0個のappleがあります。"
# "1個のorangeがあります。"
# "2個のbananaがあります。"
2 . 引数にindexの初期値を設定して開始する数値を指定できます。
(◯番から始めたいんだよなぁっていうとき。)
fruits = [ "apple", "orange","banana"]
fruits.each.with_index(5) do |a,i|
p "#{i}個の#{a}があります。"
end
#=>"5個のappleがあります。"
# "6個のorangeがあります。"
# "7個のbananaがあります。"
each_sliceメソッド
引数に数を指定します。そうすることで名前の通り指定した数をsliceして要素を取り出すことができます。
fruits = [ "apple", "orange", "banana", "lemon","lime"]
fruits.each_slice(2) do |fruit|
p fruit
end
#=>["apple", "orange"]
# ["banana", "lemon"]
# ["lime"]
each_lineメソッド
改行部分で分けて取り出すことができます。
fruits = "apple\norange\nbanana\nlemon"
fruits.each_line {|line| p line.chomp }
#=>[:apple, :orange, :banana, :lemon]
each_with_objectメソッド
引数のオブジェクトと要素を評価して最後に引数のオブジェクトを返します。
arr = [1, 2, 3]
result = arr.each_with_object({}) do |item, memo|
memo[item] = item + 1
end
p result
#=>{1=>2, 2=>3, 3=>4}
こちらはさらに深堀として。。
まとめ
eachの仲間も色々な種類があるのがわかりました。
少しずつ覚えてできる範囲を広げて行こう・・・!!