Ruby ハッシュ値を代入後の取扱注意点(delete編)

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した値に代入して新しくパラメータを作っていく」ですね!

 

何か参考になれば幸いです(*^^*)