はじめに
たとえば、reputation = {very_bad: '最悪', bad: '悪い', good: '良い', very_good: '最高'}みたいなハッシュテーブルがあったとして、その順番を{very_good: '最高', good: '良い', bad: '悪い', very_bad: '最悪'}のように後ろから並べたい。
やり方
pry(main)> reputation.to_a.reverse.to_h
#=> {very_good: '最高', good: '良い', bad: '悪い', very_bad: '最悪'}
これだけです。
一応説明すると、reverseっていう配列の順番を逆にするメソッドを使いたいんだけどreputationはhashなので使えない。なので一度to_aでhashを配列に変換してreverseした後、そのままだと配列のままなのでto_hで元の戻す、ということです。
あとがき
「gemのenum_helpを使ってラジオボタンの表示は日本語表記に、内部ではint型で処理したい。評価が低い方から数字も低い方を割り当てたい、しかしラジオボタンの表示は評価が高い方から表示したい。」という場面で必要でした。
普通enum使うときってvalueが数字になるはずだから並べ替えやすいんですが、enum_help使うと上に書いたようなhashを渡すことになるので「どうやって並べ替えるんだ…」ってなりました。
記事にすることもないような気がしますが、僕のような初心者だとto_sやto_iは使っても、to_aとかは使う機会が少なくて詰まることがあると思うので少しでも誰かの役に立てば。