2015-02-18 7 views
1

У меня есть довольно сложная сортировка.Ruby - Как отсортировать массив на основе значения вложенных хэш-элементов?

Учитывая массив хэшей, мне нужно отсортировать хеши в массиве, основываясь на значении в ключе каждого хэша.

Например (приведены в формате JSON):

"instruments":[ 
{"id":1,"title":"Piano","token":"piano","count":13}, 
{"id":6,"title":"Bass Guitar","token":"bass","count":12}, 
{"id":11,"title":"Viola","token":"viola","count":12}, 
{"id":4,"title":"Synth","token":"synth","count":11}, 
{"id":3,"title":"Keyboard","token":"keyboard","count":9}, 
{"id":7,"title":"Saxophone","token":"saxophone","count":8}, 
{"id":12,"title":"Flute","token":"flute","count":8}, 
{"id":5,"title":"Drums","token":"drums","count":6}, 
{"id":2,"title":"Guitar","token":"guitar","count":5}, 
{"id":8,"title":"Violin","token":"violin","count":5}, 
{"id":9,"title":"Vocals","token":"vocals","count":4}, 
{"id":10,"title":"Cello","token":"cello","count":4} 
] 

Это JSON является результатом responds_with в Rails. Прежде чем перейти к этому, я хотел бы переключить эти хэши в массиве, основываясь на алфавитном порядке ключа "title" в каждом хэше.

Вот скриншот части JSON (в Firebug), чтобы лучше проиллюстрировать, что я имею в виду:

enter image description here

Любая помощь будет принята с благодарностью.

Спасибо!

ответ

0

Вы можете использовать метод рубина sort_by (http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-sort_by)

Так что в вашем случае, когда инструменты выглядеть следующим образом:

instruments=[ 
{"id"=>1,"title"=>"Piano","token"=>"piano","count"=>13}, 
{"id"=>6,"title"=>"Bass Guitar","token"=>"bass","count"=>12}, 
{"id"=>11,"title"=>"Viola","token"=>"viola","count"=>12}, 
{"id"=>4,"title"=>"Synth","token"=>"synth","count"=>11}, 
{"id"=>3,"title"=>"Keyboard","token"=>"keyboard","count"=>9}, 
{"id"=>7,"title"=>"Saxophone","token"=>"saxophone","count"=>8}, 
{"id"=>12,"title"=>"Flute","token"=>"flute","count"=>8}, 
{"id"=>5,"title"=>"Drums","token"=>"drums","count"=>6}, 
{"id"=>2,"title"=>"Guitar","token"=>"guitar","count"=>5}, 
{"id"=>8,"title"=>"Violin","token"=>"violin","count"=>5}, 
{"id"=>9,"title"=>"Vocals","token"=>"vocals","count"=>4}, 
{"id"=>10,"title"=>"Cello","token"=>"cello","count"=>4} 
] 

Вы можете использовать эту функцию для сортировки по данному колонку («название» в вашем случае)

instruments.sort_by{|instrument| instrument["title"]} 

Надеюсь, что это поможет.