有關排序的一般說明。使用ruby的array類的#sort_by
方法:
[{'id' => 1},{'id'=>3},{'id'=>2}].sort_by {|x|x['id'] }
# => [{"id"=>1}, {"id"=>2}, {"id"=>3}]
或者與使用#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"=>2}, {"id"=>3}]
爲了您的情況,要使用擴展條件排序使用#%
來分割ev烯和奇數索引:
[{'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"=>1}, {"id"=>7}, {"id"=>9}, {"id"=>2}, {"id"=>4}]
對於你的情況下,具有擴展狀態進行排序使用#%
根據索引分裂,甚至id
值是索引陣列中不存在:
index = [1,3,5,7,4,2,6,8,10] # swapped 2 and 4, 9 is absent
[{'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"=>4}, {"id"=>2}, {"id"=>9}]
@僧碼感謝名單=) –
預期結果是'[{的 'id'=> 1},{ 'ID'=> 7},{ 'ID'=> 9},{ 'id'=> 2},{'id'=> 4}]' – nish
@Малъ我喜歡乾淨的解決方案。 –