Как отсортировать массив хэшей по значению в хеше?

Этот код 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

Я ищу сортировку массива хэшей по ключевому значению "значение", но они напечатаны несортированными.

Ответ 1

Ruby sort не сортируется на месте. (Возможно, у вас есть фон Python?)

Ruby имеет sort! для сортировки на месте, но нет места для варианта sort_by. На практике вы можете:

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

Ответ 2

В соответствии с @shteef, но реализовано с вариантом sort!, как было предложено:

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

Ответ 3

Хотя Ruby не имеет варианта sort_by на месте, вы можете сделать:

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

Array.sort_by! был добавлен в 1.9.2

Ответ 4

Вы можете использовать sort_me.sort_by!{ |k| k["value"]}. Это должно сработать.