J'ai un tableau dont chacun des éléments est un hachage avec trois paires clé/valeur:
:phone => "2130001111", :Zip => "12345", :city => "sometown"
J'aimerais trier les données par Zip
afin que tous les phone
s de la même zone soient ensemble Ruby a-t-il un moyen facile de le faire? will_paginate
peut-il paginer des données dans un tableau?
Simples:
array_of_hashes.sort_by { |hsh| hsh[:Zip] }
Remarque:
Lorsque vous utilisez sort_by
, vous devez affecter le résultat à une nouvelle variable: array_of_hashes = array_of_hashes.sort_by{}
, sinon vous pouvez utiliser la méthode "bang" pour modifier à la place: array_of_hashes.sort_by!{}
sorted = dataarray.sort {|a,b| a[:Zip] <=> b[:Zip]}
Utilisez le bang pour modifier en place le tableau:
array_of_hashes.sort_by!(&:Zip)
Ou le réaffecter:
array_of_hashes = array_of_hashes.sort_by(&:Zip)
Notez que la méthode sort_by va trier par ordre croissant.
Si vous avez besoin de trier par ordre décroissant, vous pouvez faire quelque chose comme ceci:
array_of_hashes.sort_by!(&:Zip).reverse!
ou
array_of_hashes = array_of_hashes.sort_by(&:Zip).reverse
Si vous voulez paginer des données dans un tableau, vous devriez nécessite 'will_paginate/array' dans votre contrôleur
Si vous avez hachage imbriqué (hachage dans un format de hachage) en tant qu'éléments de tableau (une structure semblable à celle-ci) et que vous souhaitez le trier par clé (date ici)
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
}
}
]
Utilisez la méthode Array 'sort_by' comme
data.sort_by { |element| element.keys.first }