Как отсортировать массив хэшей в рубине
У меня есть массив, каждый из элементов которого является хешем с тремя парами ключ/значение:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Я хотел бы отсортировать данные с помощью zip
, чтобы все phone
в одной области были вместе. У Ruby есть простой способ сделать это? Может ли will_paginate
разбивать данные в массиве?
Ответы
Ответ 1
Simples:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
Примечание:
При использовании sort_by
вам нужно назначить результат новой переменной: array_of_hashes = array_of_hashes.sort_by{}
иначе вы можете использовать метод "bang" для изменения: array_of_hashes.sort_by!{}
Ответ 2
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
Ответ 3
Если вы хотите разбивать страницы на данные в массиве, вы должны потребовать 'will_paginate/array' в вашем контроллере
Ответ 4
Используйте перерыв для изменения массива:
array_of_hashes.sort_by!(&:zip)
Или переустановите его:
array_of_hashes = array_of_hashes.sort_by(&:zip)
Обратите внимание, что метод sort_by будет сортироваться по возрастанию.
Если вам нужно сортировать по убыванию, вы можете сделать что-то вроде этого:
array_of_hashes.sort_by!(&:zip).reverse!
или
array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
Ответ 5
nil не сопоставим, чтобы избежать встречи с ним
sorted = dataarray.sort do |a,b|
if a[:zip] == nil
-1 # nil gets to the start, swap if you need otherwise
elsif b[:zip] == nil
1
else
a[:zip] <=> b[:zip]
end
end