💎

【Rails】配列内ハッシュの値を、任意の並び順に変更する

1 min read

やりたいこと

配列内ハッシュの値item_cdを、任意の並び順に変更したい。

0071→0091→0072→0092→0073→0093

例、以下のような配列がある。

arr = [  
         {:id=>1, :item_cd=>"0092"}, {:id=>2, :item_cd=>"0072"}, 
         {:id=>3, :item_cd=>"0091"}, {:id=>4, :item_cd=>"0071"},
         {:id=>7, :item_cd=>"0073"}, {:id=>8, :item_cd=>"0093"},
         {:id=>11, :item_cd=>"0071"}, {:id=>13, :item_cd=>"0073"}
      ]

解決策

並び替えたい順番でitem_cdの配列を作成して、indexを渡せば良い。

# 並び替えたい順番に配列を組む
ITEM_CODE_ORDER = %w[0071 0091 0072 0092 0073 0093]

# index を渡す
arr.sort_by { |x| ITEM_CODE_ORDER.index(x[:item_cd]) }

logger.debug arr
# => [{:id=>4, :item_cd=>"0071"},{:id=>11, :item_cd=>"0071"},
# {:id=>3, :item_cd=>"0091"},{:id=>2, :item_cd=>"0072"},
# {:id=>1, :item_cd=>"0092"},{:id=>7, :item_cd=>"0073"},
# {:id=>13, :item_cd=>"0073"},{:id=>8, :item_cd=>"0093"}]

参考サイト

https://stackoverflow.com/questions/22403172/sort-array-with-custom-order/22403363

https://qiita.com/nm7279/items/ac1d35f4459d20385ac7

Discussion

ログインするとコメントできます