我正在尝试对哈希数组进行反向排序,而不更改相等的哈希顺序。但是我没有看到此功能sort。
例如,
[{a:1, b:2}, {a:0, b:5}, {a:1,b:4}, {a:1,b:3}].sort { |a,b| b[:a] <=> a[:a] }
# actual: [{:a=>1, :b=>2}, {:a=>1, :b=>3}, {:a=>1, :b=>4}, {:a=>0, :b=>5}]
# expected: [{:a=>1, :b=>2}, {:a=>1, :b=>4}, {:a=>1, :b=>3}, {:a=>0, :b=>5}]
Run Code Online (Sandbox Code Playgroud)
与哈希:b=>4和:b=>3不正确地重新排序。我是否误解了排序的工作方式?
Array#sort在后台使用快速排序算法。该算法不稳定:不能保证相等的元素不会在输出中重新排序。基本上,当您使用Ruby进行排序时,应准确指定事物的排序方式,而不要让它碰运气。您可以通过使用sort_by元素索引并将其添加到排序条件来处理情况:
ary.sort_by.with_index { |h, i| [-h[:a], i] }
Run Code Online (Sandbox Code Playgroud)