如何在Ruby中执行复杂的自定义排序?

pur*_*kle 8 ruby sorting

我有一个如下所示的数组:

[
  { 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)