Rubyのsort_byで特定の順番に並び替え
昇順や降順に並び替えるのは、よくありますが、
プロデューサーの意向で特定の順番に並び替えたい時があります。
例えば、人気順に並び替えたい時などです。
id 順ではなく、とにかく指定した順番に並び替えたい
例えば、こんな配列があって、
@fruites = [
[ 1, 'apple' ],
[ 2, 'orange' ],
[ 3, 'banana' ],
[ 4, 'melon' ],
[ 5, 'peach' ],
[ 6, 'kiwi' ],
[ 7, 'cherry' ],
]
こんな id順で指定されたとします
FRUITS_ORDER = [3, 2, 7, 5, 4, 1, 6]
sort_by に、並び替えたいid順におけるindex(位置情報)を渡してあげると、その通りに並び替えられます
@fruites.sort_by{|fruit| FRUITS_ORDER.index(fruit[0])}
=> [[3, "banana"],
[2, "orange"],
[7, "cherry"],
[5, "peach"],
[4, "melon"],
[1, "apple"],
[6, "kiwi"]]