Convertir le Tableau des objets de valeur de Hachage avec un champ comme clé
J'ai un Tableau d'objets:
[
#<User id: 1, name: "Kostas">,
#<User id: 2, name: "Moufa">,
...
]
Et je veux le convertir en une valeur de Hachage avec la id
que les clés et les objets comme les valeurs. Maintenant je ne l'aime tellement mais je savoir il ya une meilleure façon:
users = User.all.reduce({}) do |hash, user|
hash[user.id] = user
hash
end
De la sortie attendue:
{
1 => #<User id: 1, name: "Kostas">,
2 => #<User id: 2, name: "Moufa">,
...
}
- J'étais en train de regarder Énumérable#group_by, et il était presque à ce que je cherche. Je pensais simplement qu'il existe une version de il la au lieu de construire des tableaux de valeurs, il est plus agressif et conserve une seule valeur.
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de Rails, ActiveSupport fournit Énumérable#index_by:
mash
manière plutôt que d'uneHash[...]
un. Lire plus propre, plus proche de ruby.users = User.all.map { |u| [u.id, u] }.to_h
Vous aurez un peu plus de code à l'aide de
each_with_object
au lieu dereduce
.