2

私はハッシュの配列を持っています:

[{number: 1},{number: 2}, {number: 3}, {number: 4}]

カスタムオーダーに基づいてそれらをソートする必要があります:

[3,4,1,2]

したがって、結果は次のようになります。

[{number: 3},{number: 4}, {number: 1}, {number: 2}]

存在することは知っていsort_byますが、昇順と降順でのみ使用しました。

私は夢中になってパフォーマンスを心配する必要はありませんが、配列を介したカスタムオーダーに基づいて、このハッシュの配列を効率的に注文する方法はありますか?

4

3 に答える 3

1
input  = [{number: 6},{number: 10}, {number: 2}, {number: 8}] 
order  = [8,10,6,2]
order.map{|i| input.find{|h| h[:number] == i }}
# => [{:number=>8}, {:number=>10}, {:number=>6}, {:number=>2}]

更新された短いコード:

input  = [{number: 6},{number: 10}, {number: 2}, {number: 8}] 
order  = [8,10,6,2]
input.group_by{|h| h[:number]}
# => {6=>[{:number=>6}],
#     10=>[{:number=>10}],
#     2=>[{:number=>2}],
#     8=>[{:number=>8}]}
input.group_by{|h| h[:number]}.values_at(*order)
# => [[{:number=>8}], [{:number=>10}], [{:number=>6}], [{:number=>2}]]
于 2013-07-08T20:35:48.730 に答える