Этот код 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
Я хочу отсортировать массив хэшей по ключу «значение», но они печатаются без сортировки.
Array#sort_by!
это новинка Ruby 1.9.2. Доступен сегодня для всех версий Ruby, требуя также моегоbackports
драгоценного камня :-)3,2,1
...sort_by
, но используйтеsort
илиsort!
и просто переверните операнды:a.sort! {|x,y| y <=> x }
( ruby-doc.org/core-1.9.3/Array.html#method-i-sort )puts sorted = sort_me.sort_by{ |k,v| v }
.reverse
.Согласно @shteef, но реализован с предложенным
sort!
вариантом:источник
Хотя Ruby не имеет
sort_by
варианта на месте, вы можете:Array.sort_by!
был добавлен в 1.9.2источник
Вы можете использовать
sort_me.sort_by!{ |k| k["value"]}
. Это должно сработать.источник