Как отсортировать массив хэшей в ruby - PullRequest
132 голосов
/ 30 марта 2011

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

:phone => "2130001111", :zip => "12345", :city => "sometown"

Я бы хотел отсортировать данные по zip, чтобы все phone в одной области были вместе. Есть ли у Ruby простой способ сделать это? Может ли will_paginate разбивать данные на массивы?

Ответы [ 5 ]

335 голосов
/ 30 марта 2011

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!{}

17 голосов
/ 30 марта 2011
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
8 голосов
/ 22 марта 2017

Используйте удар, чтобы изменить на месте массив:

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
4 голосов
/ 09 июля 2012

Если вы хотите разбить на страницы для данных в массиве, вы должны потребовать 'will_paginate / array' в вашем контроллере

2 голосов
/ 12 апреля 2018

Если у вас есть Nested Hash (хэш в формате хэша) в качестве элементов массива (структура, подобная следующей), и вы хотите отсортировать ее по ключу (дата здесь)

data =  [
    {
        "2018-11-13": {
            "avg_score": 4,
            "avg_duration": 29.24
        }
    },
    {
         "2017-03-13": {
            "avg_score": 4,
            "avg_duration": 40.24
        }
    },
    {
         "2018-03-13": {
            "avg_score": 4,
            "avg_duration": 39.24
        }
    }
]

Используйте метод Array 'sort_by' как

data.sort_by { |element| element.keys.first }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...