Est l'enregistrement d'un hachage dans un autre hachage pratique courante?
-
13-09-2019 - |
Question
Je voudrais sauver quelques objets de hachage à une collection (dans le monde Java penser comme une liste). Je recherche en ligne pour voir s'il y a une structure de données similaire Ruby et ont trouvé aucune. Pour l'instant être que j'ai essayé de sauver a[]
de hachage dans b[]
de hachage, mais ont eu des problèmes en essayant d'obtenir des données sur b[]
de hachage.
Y a-t-il des structures de collecte de données intégrées sur Ruby? Dans le cas contraire, est l'enregistrement d'un hachage dans un autre hachage pratique courante?
La solution
Si elle est l'accès au hachage dans le hachage qui est le problème alors essayez:
>> p = {:name => "Jonas", :pos => {:x=>100.23, :y=>40.04}}
=> {:pos=>{:y=>40.04, :x=>100.23}, :name=>"Jonas"}
>> p[:pos][:x]
=> 100.23
Autres conseils
Il ne devrait pas y avoir de problème avec cela.
a = {:color => 'red', :thickness => 'not very'}
b = {:data => a, :reason => 'NA'}
Peut-être pourriez-vous expliquer quels sont les problèmes que vous rencontrez.
La question est tout à fait clair, mais je pense que vous voulez avoir une liste (tableau) de hash, droit?
Dans ce cas, vous pouvez simplement les mettre dans un tableau, qui est comme une liste en Java:
a = {:a => 1, :b => 2}
b = {:c => 3, :d => 4}
list = [a, b]
Vous pouvez récupérer les hash comme la liste [0] et la liste [1]
Listes dans Ruby sont des tableaux. Vous pouvez utiliser Hash.to_a .
Si vous essayez de combiner hachage avec un hachage b, vous pouvez utiliser
Toutes les réponses ici jusqu'à présent sont sur Hash dans Hash, pas Hash Hash plus, pour des raisons d'exhaustivité, je vais avec ce carillon: Notez que lors de la fusion B en A, toutes les clés que A a qui sont en B sont remplacés. # Define two independent Hash objects
hash_a = { :a => 'apple', :b => 'bear', :c => 'camel' }
hash_b = { :c => 'car', :d => 'dolphin' }
# Combine two hashes with the Hash#merge method
hash_c = hash_a.merge(hash_b)
# The combined hash has all the keys from both sets
puts hash_c[:a] # => 'apple'
puts hash_c[:c] # => 'car', not 'camel' since B overwrites A