Reputation: 19257
I have an array, each of whose elements is a hash with three key/value pairs:
:phone => "2130001111", :zip => "12345", :city => "sometown"
I'd like to sort the data by zip
so all the phone
s in the same area are together. Does Ruby have an easy way to do that? Can will_paginate
paginate data in an array?
Upvotes: 188
Views: 116417
Reputation: 3621
If you have Nested Hash (Hash inside a hash format) as Array elements (a structure like the following) and want to sort it by key (date here)
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
}
}
]
Use Array 'sort_by' method as
data.sort_by { |element| element.keys.first }
Upvotes: 5
Reputation: 1776
Use the bang to modify in place the array:
array_of_hashes.sort_by!(&:zip)
Or re-assign it:
array_of_hashes = array_of_hashes.sort_by(&:zip)
Note that sort_by method will sort by ascending order.
If you need to sort with descending order you could do something like this:
array_of_hashes.sort_by!(&:zip).reverse!
or
array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
Upvotes: 19
Reputation: 138210
Simples:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
Note:
When using sort_by
you need to assign the result to a new variable: array_of_hashes = array_of_hashes.sort_by{}
otherwise you can use the "bang" method to modify in place: array_of_hashes.sort_by!{}
Upvotes: 432
Reputation: 39
If you want to paginate for data in array you should require 'will_paginate/array' in your controller
Upvotes: 3