2009-06-15 9 views
2

Ich möchte einige Hash-Objekte in einer Sammlung speichern (in der Java-Welt als Liste). Ich suche online nach einer ähnlichen Datenstruktur in Ruby und habe keine gefunden. Im Moment habe ich versucht, Hash a[] in Hash b[] zu speichern, aber habe Probleme beim Versuch, Daten aus Hash b[] zu bekommen.Wird ein Hash in einer anderen gängigen Hash-Methode gespeichert?

Gibt es in Ruby integrierte Sammlungsdatenstrukturen? Wenn nicht, speichert ein Hash in einer anderen gängigen Hash-Methode?

+2

Können Sie uns Code zeigen? –

Antwort

3

Wenn es den Hash in der Hash-Zugriff, die das Problem ist, dann versuchen:

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

Listen in Ruby sind Arrays. Sie können Hash.to_a verwenden.

Wenn Sie versuchen, Hash ein mit Hash-b zu kombinieren, können Sie Hash.merge

EDIT: Wenn Sie versuchen, Hash ein in Hash-b einzufügen, können Sie

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

Zur Verdeutlichung: Merge kombiniert zwei Hashes zu einem, nicht einen Hash als Wert in einen anderen Hash hinzufügen. – Chuck

+0

oh, ich habe missverstanden was er machen wollte. – CookieOfFortune

+0

Nun, ich bin mir nicht ganz sicher was es ist. Ich denke, es ist ein Hash in einem Hash, aber ich bin mir nicht sicher. – Chuck

2

tun Es shouldn damit kein Problem.

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

Vielleicht könnten Sie erklären, welche Probleme Sie begegnen.

2

Die Frage ist nicht ganz klar, aber ich denke, Sie eine Liste haben wollen (Array) von Hashes, nicht wahr?

In diesem Fall können Sie ein Array nur setzte sie in, die in Java wie eine Liste ist:

a = {:a => 1, :b => 2} 
b = {:c => 3, :d => 4} 
list = [a, b] 

Sie diese Hashes wie Liste abrufen können [0] und Liste [1]

1

Alle Antworten hier so weit über Hash in Hash, nicht und Hash Hash, also aus Gründen der Vollständigkeit, ich mit diesem läuten werden:

# 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 

Beachten Sie, dass, wenn Sie B in A fusionieren, alle Schlüssel, dass A das war in B werden überschrieben.

Verwandte Themen