Existe-t-il un moyen simple ou de combiner élégamment deux hachages sans écraser les clés en double? En d'autres termes, si la clé est présente dans le hachage d'origine, je ne souhaite pas en modifier la valeur.Comment puis-je fusionner deux hachages sans doublons écrasés dans Ruby?
Répondre
Si vous avez deux hash, options
et defaults
, et vous souhaitez fusionner defaults
en options
sans écraser les clés existantes, ce que vous voulez vraiment faire est l'inverse: fusionner options
en defaults
:
options = defaults.merge(options)
Ou , si vous utilisez Rails vous pouvez faire:
options.reverse_merge!(defaults)
Tout à fait d'accord, merci beaucoup pour reverse_merge! méthode ne le savait pas :) –
WHY est-il besoin de parenthèses ici? Vous ne pouvez pas faire des options default.merge il apparaît. – Donato
Si vos problèmes est que le hachage original et le second les deux peuvent avoir des clés en double et vous ne voulez pas écraser dans les deux sens, vous pourriez avoir à passer pour un simple fusion manuelle avec une sorte de vérification de collision et de manutention:
hash2.each_key do |key|
if (hash1.has_key?(key))
hash1[ "hash2-originated-#{key}" ] = hash2[key]
else
hash1[key]=hash2[key]
end
end
De toute évidence, ce qui est très rudimentaire et suppose que hash1 n'a pas de clés appelées « hash2 -originée-quoi que ce soit "- il vaudrait peut-être mieux ajouter un nombre à la clé pour qu'elle devienne key1, key2 et ainsi de suite jusqu'à ce que vous en ayez une qui ne soit pas déjà dans hash1. De plus, je n'ai pas fait de rubis depuis quelques mois, donc ce n'est probablement pas correct sur le plan syntaxique, mais vous devriez être capable de comprendre l'essentiel.
Vous pouvez également redéfinir la valeur de la clé en tant que tableau afin que hash1 [key] renvoie la valeur d'origine de hash1 et la valeur de hash2. Cela dépend de ce que vous voulez que votre résultat soit vraiment.
Que diriez-vous de ne pas garder les deux clés, mais en additionnant les valeurs de la même clé? –
@ TomK.C.Chiu Cela dépend beaucoup des circonstances que nous ne pouvons pas juger à partir de la question - que se passe-t-il si les valeurs dans hash1 sont des chaînes et hash2 sont des entiers? Dans certains cas, cela pourrait être une option viable, mais le plus souvent cela causerait des problèmes - la suggestion d'utiliser des listes de valeurs fonctionne très bien autour de cela. – glenatron
Il existe un moyen dans la bibliothèque Ruby standard de fusionner des hachages sans écraser les valeurs existantes ou réaffecter le hachage.
important_hash.merge!(defaults) { |key, important, default| important }
- 1. Comment fusionner efficacement deux hachages dans Ruby C API?
- 2. fusionner des hachages similaires en ruby?
- 3. Ruby: Comparant deux tableaux de hachages
- 4. Comparer deux hachages similaires en ruby
- 5. Comment fusionner deux dictionnaires en C# avec des doublons
- 6. hachages de filtre dans Ruby
- 7. comment fusionner 2 hachages profonds en perl
- 8. Comment comparer deux hachages en Perl sans utiliser Data :: Compare?
- 9. Lucene AddIndexes (fusionner) - comment éviter les doublons?
- 10. Fusionner les hachages intérieurs en Perl
- 11. Comment fusionner les doublons dans les tableaux de python 2D
- 12. Comment fusionner deux objets?
- 13. Comment fusionner deux masques ensemble dans MATLAB?
- 14. Combinaison de deux listes et suppression des doublons, sans suppression des doublons dans la liste d'origine
- 15. Ruby: actes_as_tree aux hachages imbriqués (tableaux de hachages)
- 16. BlackBerry - comment deux fusionner deux images
- 17. Comment fusionner deux projets Delphi?
- 18. Comment fusionner deux tableaux dans un plist?
- 19. Comment fusionner deux xmllistcollection dans Flex 3
- 20. Comment fusionner deux listes IQueryable
- 21. Comment fusionner deux itérateurs python?
- 22. Comment fusionner deux branches SVN?
- 23. Fusion de deux HashTable avec élimination des doublons dans Java
- 24. Fusionner deux lignes dans SQL
- 25. fusionner deux tables en une seule
- 26. Fusionner deux tables MySQL
- 27. fusionner deux arborescence splay
- 28. Fusionner deux objets JavaScript
- 29. Les hachages littéraux dans C#?
- 30. SQL - trouver des doublons dans deux colonnes
Voulez-vous dire vraiment des tableaux (par exemple: [ 'a', 'b', 'c']) ou hash (par exemple: { 'a' => 1, 'b' => 2, « c '=> 3})? –
Désolé, je parlais de hashes :) –