Как отсортировать массив хэшей по значению в хэше? - PullRequest
110 голосов
/ 01 июля 2010

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

199 голосов
/ 01 июля 2010

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

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

sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
21 голосов
/ 01 июля 2010

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

sort_me.sort! { |x, y| x["value"] <=> y["value"] }
6 голосов
/ 22 ноября 2012

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

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

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

2 голосов
/ 13 ноября 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...