我有一个如下所示的数组:
[
{ type: 'A', price: '0.01' },
{ type: 'B', price: '4.23' },
{ type: 'D', price: '2.29' },
{ type: 'B', price: '3.38' },
{ type: 'C', price: '1.15' }
]
Run Code Online (Sandbox Code Playgroud)
我需要将它们分组type,然后按升序对它们进行排序price.我可以通过执行以下操作来解决此问题:
boards.sort_by {|e| [e['type'], e['price'].to_f]}
Run Code Online (Sandbox Code Playgroud)
不幸的是,type当它们被排序时,它按字母顺序排序BADC
如何按预先确定的规则对数组进行排序?
ste*_*lag 14
ar=[
{ type: 'A', price: '0.01' },
{ type: 'B', price: '4.23' },
{ type: 'D', price: '2.29' },
{ type: 'B', price: '3.38' },
{ type: 'C', price: '1.15' }
]
SORT_ORDER = 'BADC' #could also be an array, eg ["monday", "tuesday", ...]
p ar.sort_by{|e| [SORT_ORDER.index(e[:type]), e[:price].to_f]}
Run Code Online (Sandbox Code Playgroud)
输出:
[{:type=>"B", :price=>"3.38"},
{:type=>"B", :price=>"4.23"},
{:type=>"A", :price=>"0.01"},
{:type=>"D", :price=>"2.29"},
{:type=>"C", :price=>"1.15"}]
Run Code Online (Sandbox Code Playgroud)