How do I sort an array of hashes by a value in the hash?

arrays, hash, ruby, sorting

Solution

Ruby's `sort` doesn't sort in-place. (Do you have a Python background, perhaps?)

Ruby has `sort!` for in-place sorting, but there's no in-place variant for `sort_by` in Ruby 1.8. In practice, you can do:

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

As of Ruby 1.9+, `.sort_by!` is available for in-place sorting:

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

Problem

This Ruby code is not behaving as I would expect: ``` # 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 ``` I'm looking to sort the array of hashes by the key "value", but they are printed unsorted.

Original source