要sort_by
在此处使用,您需要找到一种方法来保持排序正确。这是一个,虽然它有点像黑客:
values = [{value: "First", type: 0}, {value: "Second", type: 1},
{value: "1111", type: 0}, {value: "2222", type: 1}]
type = 1
n = values.size # => 4
values.each_with_index {|h,i| h[:type] = i-n if h[:type] == type}
# => [{:value=>"First", :type=>0}, {:value=>"Second", :type=>-3},
{:value=>"1111", :type=>0}, {:value=>"2222", :type=>-1}]
values.sort_by! {|h| h[:type]}
# => [{:value=>"Second", :type=>-3}, {:value=>"2222", :type=>-1},
{:value=>"1111", :type=>0}, {:value=>"First", :type=>0}]
values.map {|h| h[:type] = type if h[:type] < 0; h}
# => [{:value=>"Second", :type=>1}, {:value=>"2222", :type=>1},
{:value=>"1111", :type=>0}, {:value=>"First", :type=>0}]