LoginSignup
0
0

More than 3 years have passed since last update.

each文の中にeach文でいい気分!?

Posted at

はじめに

each文が入れ子になると、読みにくいので、どう考えれば良いのか、まとめてみた。

配列の中の配列の中の配列


shopping_price = [["野菜", [200, 250, 220]], ["フルーツ", [1200, 1500]]]

そもそも配列の中に配列がある場合、どのようにして中の値を取り出すのか。
それは、添字を重ねることで、取り出すことができる。
上の配列で1200を取り出すなら、

puts shopping_price[1][1][0]

となる。

each文

基本的な記述は


配列.each do |ブロックパラメーター(変数)|
 #繰り返したい処理
end

ブロックパラメーターはdo~endの中でのみ扱える変数。イメージとしては、配列の中が一つ一つ入っていく感じ。

配列の名前が複数形の場合、その単数形を入れることが多い。

each文の中にeach文


shopping_price = [["野菜", [200, 250, 220]], ["フルーツ", [1200, 1500]]]

shopping_price.each do |shopping|
 sum = 0
 shopping[1].each do |price|
  sum += price
 end
 puts "#{shopping[0]}の合計金額は#{sum}"
end
#=>野菜の合計金額は670円
#=>フルーツの合計金額は2700円

外のeach文には、
1回目に["野菜", [200, 250, 220]]
2回目に["フルーツ", [1200, 1500]]
|shopping|の中に入る。

中のeach文の配列には、shopping[1]が当てられている。
つまり、
1回目に[200, 250, 220]
2回目に[1200, 1500]
priceの中に入る。

1回目の計算は、
sum = 0 + 200
sum = 200 + 250
sum = 450 + 220

となる。

shopping[0]には、野菜フルーツがそれぞれ入る。

最後に

[角括弧]がたくさん出てきて、読みにくいが、どの[角括弧]も必要。
each文の中にeach文や配列の中に配列は読みにくいので、リファクタリングが必要だろう。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0