Rubyのハッシュ値の代入後の取扱について注意するポイントがあるのでご紹介していきます。
ハッシュ値を代入後、代入値をdeleteしてみる
SETTINGという値をdataに代入して、指定したカテゴリー以外をdeleteで削除していきます。
SETTING = { house: { price: 50000, size: 120, category: 1, rank: 1 }, desk: { price: 5000, size: 100, category: 2, rank: 3}, clothes: { price: 5000, size: 100, category: 3, rank: 1}, chair: { price: 3000, size: 30, category: 2, rank: 2}, tv: { price: 25000, size: 100, category: 2, rank: 1}, } def create_data_by_category(category) data = SETTING data.each do |key, value| # 指定したcategory以外をdelete unless value[:category] == category data.delete(key) end end data end p create_data_by_category(2) # 戻り値 # { # :desk=>{:price=>5000, :size=>100, :category=>2, :rank=>3}, # :chair=>{:price=>3000, :size=>30, :category=>2, :rank=>2}, # :tv=>{:price=>25000, :size=>100, :category=>2, :rank=>1} # } p create_data_by_category(1) # 戻り値 # {}
create_data_by_category(2)の場合は、category2のデータが取得出来ていますね!
create_data_by_category(1)の場合は、空のハッシュ値が取れてきます。
dataに代入したのになぜ?!ですよね。
dataが指している場所がSETTINGなので
SETTING自体が書き換えられているんです。
この場合、Rubyのハッシュ値についての記事を参考にして書いて頂けると
うまく処理ができると思います!
ポイントは、「Hash.newした値に代入して新しくパラメータを作っていく」ですね!
何か参考になれば幸いです(*^^*)