这个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
我希望按键“值”对哈希数组进行排序,但它们是未分类打印的。
答案 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"]}
。这应该工作。