如何通过散列中的值对散​​列数组进行排序?

时间:2010-06-30 23:18:14

标签: ruby arrays sorting hash

这个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

我希望按键“值”对哈希数组进行排序,但它们是未分类打印的。

4 个答案:

答案 0 :(得分:198)

Ruby的sort没有就地排序。 (你有Python背景吗?)

Ruby有sort!用于就地排序,但sort_by没有就地变体。在实践中,您可以这样做:

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

答案 1 :(得分:21)

根据@shteef,但按照建议使用sort!变体实现:

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

答案 2 :(得分:6)

虽然Ruby没有sort_by就地变体,但您可以这样做:

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

Array.sort_by!已添加到1.9.2

答案 3 :(得分:2)

您可以使用sort_me.sort_by!{ |k| k["value"]}。这应该工作。