Comment fusionner les hachages dans la matrice avec la même clé, paire de valeur? J'ai la matrice suivante, veut obtenir p> y a-t-il de manière rubie pour le faire? Essayé peu de façons mais pas de succès jusqu'à présent. P> p>
3 Réponses :
Le arry code> Vous avez publié n'est pas un tableau ruby valide en premier lieu (je l'ai résolu dans mon édition.) arry.
group_by { |h| h["id"] }.
values.
map { |a| a.reduce(&:merge) }
#â [{"id"=>1, "val1"=>123, "val2"=>321, "val3"=>445},
# {"id"=>2, "val1"=>234}, {"id"=>3, "val3"=>334}]
Si la mémoire sert, dans une autre réponse récente, vous avez eu quelque chose comme valeurs.map {| A | .. code>, que vous avez également ici. Comme vous le savez bien, vous pouvez écrire juste carte {| _, a | ... code>. Préférez-vous ce que vous avez pour la lisibilité? (De toute façon, bonne réponse.)
Exactement. Les questions de lisibilité et si l'on a 1 milliard d'éléments dans le tableau, la question doit être fixée là-bas.
J'allais juste poster arry.group_by {| x | x ['id']} .values.map {| z | z.Inject (&: fusionner)} code> et j'ai vu que je suis en retard.
{1=>{"id"=>1, "val1"=>123, "val2"=>321, "val3"=>445},
2=>{"id"=>2, "val1"=>234},
3=>{"id"=>3, "val3"=>334}}
Appréciez une réponse aussi détaillée, merci! Va certainement regarder dans trois variables de blocs.
Cela devrait fonctionner aussi,
[{"id"=>1, "val1"=>123, "val2"=>321, "val3"=>445}, {"id"=>2, "val1"=>234}, {"id"=>3, "val3"=>334}]
Ceci est un souffle de cheveux différent de celui de Aleksei code> antérieur de la réponse. Peut-être que vous pourriez avoir juste laissé un commentaire sur sa réponse en disant que les valeurs Carte code>