J'ai un tableau dont chacun des éléments est un hachage avec trois paires clé / valeur:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Je voudrais trier les données par zip
afin que tous les phone
s dans la même zone soient ensemble. Ruby a-t-il un moyen simple de le faire? Peut will_paginate
paginer les données dans un tableau?
[city,zip]=>phone
oucity=>{zip1=>[<phones>], zip2=>...}
.Réponses:
Simples:
Remarque:
Lors de l'utilisation,
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 en place:array_of_hashes.sort_by!{}
la source
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 sur place:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
et donc cela ne fonctionnera que si.zip
est défini comme une méthode sur chaque Hash. Par défaut, les hachages n'exposent pas leurs clés en tant que méthodes, donc je suppose que vous avez probablement autre chose à faire.array_of_hashes.sort_by!(&:zip)
.zip
et les[:zip]
deux fonctionneront. ActiveRecords a les deux styles définis.la source
Utilisez le bang pour modifier en place le tableau:
Ou réattribuez-le:
Notez que la méthode sort_by triera par ordre croissant.
Si vous avez besoin de trier par ordre décroissant, vous pouvez faire quelque chose comme ceci:
ou
la source
&:
est un raccourci pourmethod
, nonattribute
! Vous présumez que le Hash a des méthodes reflétant des attributs ..reverse
méthode: pSi vous souhaitez paginer les données dans un tableau, vous devez avoir besoin de 'will_paginate / array' dans votre contrôleur
la source
Si vous avez un hachage imbriqué (hachage dans un format de hachage) en tant qu'éléments de tableau (une structure comme celle-ci) et que vous souhaitez le trier par clé (date ici)
Utilisez la méthode Array 'sort_by' comme
la source