Comment puis-je groupe ce tableau de hachages?
J'ai ce tableau de hachages:
- :name: Ben
:age: 18
- :name: David
:age: 19
- :name: Sam
:age: 18
J'ai besoin de les grouper par age
, de sorte qu'ils finissent comme ceci:
18:
- :name: Ben
:age: 18
- :name: Sam
:age: 18
19:
- :name: David
:age: 19
J'ai essayé de faire de cette façon:
array = array.group_by &:age
mais j'obtiens cette erreur:
NoMethodError (undefined method `age' for {:name=>"Ben", :age=>18}:Hash):
Ce que je fais mal? Je suis à l'aide de Rails 3.0.1 et Ruby 1.9.2
Vous devez vous connecter pour publier un commentaire.
La
&:age
signifie que legroup_by
méthode doit appeler leage
méthode sur les éléments de tableau pour obtenir le groupe de données. Cetteage
méthode n'est pas définie sur les éléments qui sont les Hachages dans votre cas.Cela devrait fonctionner:
ou
Comme d'autres l'ont souligné ruby
Symbol#to_proc
méthode est invoquée et appelle laage
méthode sur chaque hachage dans le tableau. Le problème ici est que les hachages de ne pas répondre à uneage
méthode.Maintenant, nous pourrions définir un pour la classe Hash, mais nous ne voulez probablement pas à tous les hachage exemple dans le programme. Au lieu de cela nous est possible de définir simplement la
age
méthode sur chaque hachage dans le tableau comme suit:Et alors nous pouvons utiliser
group_by
juste que vous étiez avant: