如何按散列中的值对散列数组排序?

这段 Ruby 代码的行为并不像我所期望的那样:

# create an array of hashes
sort_me = []
sort_me.push({"value"=>1, "name"=>"a"})
sort_me.push({"value"=>3, "name"=>"c"})
sort_me.push({"value"=>2, "name"=>"b"})


# sort
sort_me.sort_by { |k| k["value"]}


# same order as above!
puts sort_me

我希望按键“ value”对散列数组进行排序,但它们是未排序的。

98737 次浏览

Ruby 的 sort不会就地排序(您是否有 Python 背景?)

Ruby 有 sort!用于就地排序,但是在 Ruby 1.8中没有 sort_by的就地变体。实际上,你可以这样做:

sorted = sort_me.sort_by { |k| k["value"] }
puts sorted

从 Ruby 1.9 + 开始,.sort_by!就可以进行就地排序了:

sort_me.sort_by! { |k| k["value"]}

按照@sheef,但按照建议使用 sort!变式实施:

sort_me.sort! { |x, y| x["value"] <=> y["value"] }

虽然 Ruby 没有 sort_by就地版本,但是你可以这样做:

sort_me = sort_me.sort_by { |k| k["value"] }

Array.sort_by!是在1.9.2中添加的

你可以使用 sort_me.sort_by!{ |k| k["value"]},这个应该可以。