一般的排序说明。使用
Ruby的
Array类的
#sort_by
方法:
[{'id' => 1},{'id'=>3},{'id'=>2}].sort_by {|x|x['id'] }
或者使用
#values
方法作为回调函数:
[{'id' => 1},{'id'=>3},{'id'=>2}].sort_by(&:values)
# => [{"id"=>1}, {"id"=>2}, {"id"=>3}]
或者您可以使用更明显的版本,使用#sort
方法:
[{'id' => 1},{'id'=>3},{'id'=>2}].sort {|x,y| x['id'] <=> y['id'] }
对于您的情况,如果要按照扩展条件排序,请使用
#%
来区分偶数和奇数索引:
[{'id' => 1},{'id'=>4},{'id'=>9},{'id'=>2},{'id'=>7}].sort do |x,y|
u = y['id'] % 2 <=> x['id'] % 2
u == 0 && y['id'] <=> x['id'] || u
end
针对您的情况,要按扩展条件进行排序,请使用
#%
根据索引进行拆分,即使在索引数组中缺少
id
值也可以这样做。
index = [1,3,5,7,4,2,6,8,10]
[{'id' => 1},{'id'=>4},{'id'=>9},{'id'=>2},{'id'=>7}].sort do |x,y|
!index.rindex( x[ 'id' ] ) && 1 || index.rindex( x[ 'id' ] ) <=> index.rindex( y[ 'id' ] ) || -1
end
[{'id' => 1},{'id' => 7},{'id' => 9},{'id' => 2},{'id' => 4}]
。 - nish