ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

Ruby - 配列やハッシュの繰り返し each

配列の要素をいい感じに取り出して利用する

eachメソッドは「イテレータ」という種類のメソッドで、以下のような構文

配列.each do |変数|
    繰り返したい処理
end

または

配列.each{|変数|}
    繰り返したい処理
end

最初の例では、each以降のdo ~ endの部分はブロックと呼ばれる部分で、こういった構文のため一般にブロック付きメソッドとも呼ばれる。ふたつ目の例はdoを省略したかたちで、基本的にこちらほうが見やすそう。

|変数|という部分では、配列から1つずつ取りだす際に使う変数名を指定することができる。その変数をブロック内で利用することになる。なのでわかりやすい命名をしたい。

基本的な使い方の例

基本は配列もハッシュも同じような構文で、ハッシュの場合は変数を2つ設定できる。以下にハッシュの場合を示す。

neta = {
    :maguro => 'まぐろ',
    :salmon => 'サーモン',
    :tamago => 'たまご'
}

neta.each do |key, value|
    puts "#{key}:#{value}"
end
$ruby array_prac.rb
maguro:まぐろ
salmon:サーモン
tamago:たまご

いろんな使い方

ブロック的に使わないでかんたんに書きたいとき

neta.each{|en, ja| puts "#{en}を日本語で, #{ja}と言う!"}
$ruby array_prac.rb
tunaを日本語で, まぐろと言う!
salmonを日本語で, サーモンと言う!
eggを日本語で, たまごと言う!

ハッシュの深さがある場合

変数指定に括弧を使えば、いい感じにやってくれる。

neta = {
    :tuna => ['まぐろ', 100],
    :salmon => ['サーモン', 200],
    :egg => ['たまご', 300]
}

neta.each{|id, (name, price)| puts "#{id}: #{name}, #{price}"}
$ruby array_prac.rb
tuna: まぐろ, 100
salmon: サーモン, 200
egg: たまご, 300

参考

たのしいRuby 第5版

たのしいRuby 第5版

qiita.com