155 votes

Comment est-ce que je peux combiner deux hachages sans les clés dupliquées écrasés en ruby ?

Je suis nouveau dans Ruby, oui, désolé si c’est une question facile  :)

Vous connaissez un moyen simple ou élégant de fusionner deux hachages sans écraser les clés dupliquées ? Autrement dit, si la clé n’est présente dans la table de hachage originale je ne veux pas modifier sa valeur.

256voto

Alex Reisner Points 10026

Si vous avez deux hachages, et , et que vous voulez fusionner en sans écraser les clés existantes, ce que vous voulez vraiment faire est l’inverse : fusion dans :

Ou, si vous utilisez des Rails, vous pouvez faire :

3voto

glenatron Points 5897

Si votre problème est que, à l'origine de hachage et la seconde les deux peuvent avoir des doubles de clés et vous ne voulez pas écraser dans les deux sens, vous pourriez avoir à aller pour un simple manuel de fusion avec une sorte de contrôle des collisions et de la manipulation:

hash2.each_key do |key|
  if ( hash1.has_key?(key) )
       hash1[ "hash2-originated-#{key}" ] = hash2[key]
  else
       hash1[key]=hash2[key]
  end
end

Évidemment, c'est très rudimentaire et suppose que hash1 n'a pas toutes les clés appelé "hash2 d'origine-que ce soit" - vous aurez peut-être mieux de simplement ajouter un nombre à la clé de sorte qu'il devient key1, key2 et ainsi de suite jusqu'à ce que vous frappez sur une qui ne l'est pas déjà dans hash1. Aussi, je n'ai pas fait de rubis pour quelques mois donc ce n'est probablement pas syntaxiquement correct, mais vous devriez être capable de comprendre l'essentiel.

Sinon redéfinir la valeur de la clé, comme un tableau afin que hash1[key] renvoie la valeur d'origine de hash1 et la valeur de hash2. Dépend de ce que vous voulez que vos résultats soient vraiment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X