【実務に使ってるRuby on Rails】配列内のハッシュの値を処理する

このパターンはよく出る処理です。シンプルに書こうとしてデータの状態がわからなくなり、ハマってしまいやすいポイントです。

今回はシンプルに書くことよりも処理として問題のない書き方を紹介します。コメント1とコメント2を変更すれば使いまわせるテンプレートです。

aとbの2つの配列内のハッシュの値を、aに足し算するサンプルです。

a = [  
 {test1: 1}, 
 {test2: 2}
]


b = [  
 {test1: 5}, 
 {test2: 3}
]

a.each do |a_obj|
 b.each_with_index do |b_obj, key|
   # 1.ハッシュのキー名を比較
   if a_obj.keys[0] == b_obj.keys[0]
     # 2.aに値を足す
     a[key][b_obj.keys[0]] += b_obj.values[0]
   end
 end
end

# 結果はこのようになります。
# p a
# [{:test1=>6}, {:test2=>5}]

今回使用した主なメソッド

each_with_index

each_with_indexメソッドは、要素の数だけブロックを繰り返し実行します。繰り返しごとにブロック引数itemには各要素が入り、idxには0、1、2、...と番号が入ります。

keys

keysメソッドは、ハッシュのキーを集めて配列にして返します。

https://ref.xaio.jp/ruby/classes/hash/keys

values

valuesメソッドは、ハッシュのキーの値を集めて配列にして返します。

https://ref.xaio.jp/ruby/classes/hash/values

この記事が気に入ったらサポートをしてみませんか?