У меня есть массив, каждый элемент которого представляет собой хэш с тремя парами ключ / значение:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Я хотел бы отсортировать данные, zip
чтобы все phone
в одной области были вместе. Есть ли у Ruby простой способ сделать это? Можно ли will_paginate
разбивать данные на массивы?
[city,zip]=>phone
илиcity=>{zip1=>[<phones>], zip2=>...}
.Ответы:
Simples:
Примечание:
При использовании
sort_by
вам нужно присвоить результат новой переменной: вarray_of_hashes = array_of_hashes.sort_by{}
противном случае вы можете использовать метод «bang» для изменения на месте:array_of_hashes.sort_by!{}
источник
sort_by
вам нужно присвоить результат новой переменной: вarray_of_hashes = array_of_hashes.sort_by{}
противном случае вы можете использовать метод «взрыва» для изменения на месте:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
и он будет работать, только если.zip
определен как метод для каждого хэша. По умолчанию хэши не выставляют свои ключи как методы, поэтому, я думаю, у вас, вероятно, происходит что-то еще.array_of_hashes.sort_by!(&:zip)
.zip
и то и[:zip]
другое будет работать. В ActiveRecords определены оба стиля.источник
Используйте удар, чтобы изменить массив:
Или переназначить его:
Обратите внимание, что метод sort_by будет сортировать по возрастанию.
Если вам нужно отсортировать по убыванию, вы можете сделать что-то вроде этого:
или
источник
&:
является сокращением дляmethod
, неattribute
! Вы предполагаете, что в Hash есть методы, отражающие атрибуты ...reverse
метод: рЕсли вы хотите разбить данные на массивы на страницы, вам потребуется 'will_paginate / array' в вашем контроллере
источник
Если у вас есть Nested Hash (Hash внутри хеш-формата) в качестве элементов Array (структура, подобная следующей), и вы хотите отсортировать ее по ключу (дата здесь)
Использовать метод Array 'sort_by' как
источник