2009-06-15 13 views
2

Je voudrais enregistrer des objets de hachage dans une collection (dans le monde Java, je considère cela comme une liste). Je recherche en ligne pour voir s'il existe une structure de données similaire dans Ruby et n'en ai trouvé aucune. Pour l'instant, j'ai essayé d'enregistrer hash a[] en hash b[], mais ont eu des problèmes en essayant d'obtenir des données en hash b[].Est-ce que sauvegarder un hachage dans une autre pratique courante de hachage?

Existe-t-il des structures de données de collecte intégrées sur Ruby? Si non, est-ce que sauvegarder un hachage dans une autre pratique courante de hachage?

+2

Pourriez-vous nous montrer un code? –

Répondre

3

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 
1

Les listes dans Ruby sont des tableaux. Vous pouvez utiliser Hash.to_a.

Si vous essayez de combiner un hachage avec hachage b, vous pouvez utiliser Hash.merge

EDIT: Si vous essayez d'insérer hachage un dans hachage b, vous pouvez faire

b["Hash a"] = a; 
+0

Pour plus de clarté: la fusion combinera deux hachages en un seul, sans ajouter un hachage en tant que valeur dans un autre hachage. – Chuck

+0

oh, j'ai mal compris ce qu'il voulait faire. – CookieOfFortune

+0

Eh bien, je ne suis pas tout à fait certain de ce que c'est. Je pense que c'est un hachage à l'intérieur d'un hash, mais je ne suis pas sûr. – Chuck

2

Il shouldn pas de problème avec ça.

a = {:color => 'red', :thickness => 'not very'} 
b = {:data => a, :reason => 'NA'} 

Peut-être pourriez-vous expliquer les problèmes que vous rencontrez.

2

La question est pas tout à fait claire, mais je pense que vous voulez avoir une liste (tableau) de hash, non?

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]

1

Toutes les réponses ici jusqu'à présent sont sur Hash dans Hash, pas Hash, plus Hash, pour des raisons d'exhaustivité, je vais avec ce carillon:

# 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 

Notez que lors de la fusion B en A, toutes les clés que A avait ce sont en B sont écrasés.