Ruby ハッシュ値の特定データ取得とソート(もっと綺麗なコード編)

Rubyのハッシュ値の特定データの取得について以前ブログ記事の

Ruby ハッシュ値の特定データ取得とソートで書いたのですが

もっと簡潔な書き方があったのでご紹介いたします!

ポイントは変数に一度データ設定せずにそのまま値をソートしていいます。

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)
    Hash[SETTING.select{ |key, value| (value[:category] == category) }
        .sort_by{ |key, value| value[:rank] }]
end
# カテゴリー2のデータを生成
p create_data_by_category(2)
# 戻り値
# {
#     :tv=>{:price=>25000, :size=>100, :category=>2, :rank=>1}, 
#     :chair=>{:price=>3000, :size=>30, :category=>2, :rank=>2}, 
#     :desk=>{:price=>5000, :size=>100, :category=>2, :rank=>3}
# }

こちらのほうが簡潔で断然いいですね!(*^^*)

 

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