0
votes

Fusionner les hachages avec la même paire de valeur de la clé à l'intérieur de la matrice

Comment fusionner les hachages dans la matrice avec la même clé, paire de valeur? J'ai la matrice suivante, xxx

veut obtenir xxx

y a-t-il de manière rubie pour le faire? Essayé peu de façons mais pas de succès jusqu'à présent.


0 commentaires

3 Réponses :


7
votes

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}]


3 commentaires

Si la mémoire sert, dans une autre réponse récente, vous avez eu quelque chose comme valeurs.map {| A | .. , que vous avez également ici. Comme vous le savez bien, vous pouvez écrire juste carte {| _, a | ... . 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)} et j'ai vu que je suis en retard.



1
votes
{1=>{"id"=>1, "val1"=>123, "val2"=>321, "val3"=>445},
 2=>{"id"=>2, "val1"=>234},
 3=>{"id"=>3, "val3"=>334}} 

1 commentaires

Appréciez une réponse aussi détaillée, merci! Va certainement regarder dans trois variables de blocs.



0
votes

Cela devrait fonctionner aussi,

[{"id"=>1, "val1"=>123, "val2"=>321, "val3"=>445}, {"id"=>2, "val1"=>234}, {"id"=>3, "val3"=>334}]


1 commentaires

Ceci est un souffle de cheveux différent de celui de Aleksei 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 . Pourraient être supprimés en ajoutant la variable de bloc supplémentaire à Carte