Domanda

mi piacerebbe salvare alcuni oggetti hash per una raccolta (nel mondo Java pensare ad esso come una lista). Ho ricerca online per vedere se c'è una struttura dati simile a Ruby e ho trovato nessuno. Per il momento essendo che ho cercato di salvare hash a[] in hash b[], ma sto avendo problemi cercando di ottenere i dati di hash b[].

Ci sono strutture di dati di raccolta integrate su Ruby? In caso contrario, è il salvataggio di un hash in un'altra pratica comune hash?

È stato utile?

Soluzione

Se è l'accesso alla hash l'hash che è il problema quindi provare:

>> p = {:name => "Jonas", :pos => {:x=>100.23, :y=>40.04}}
=> {:pos=>{:y=>40.04, :x=>100.23}, :name=>"Jonas"}
>> p[:pos][:x]
=> 100.23

Altri suggerimenti

Non ci dovrebbe essere alcun problema con questo.

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

Forse si potrebbe spiegare quali sono i problemi che stai incontrando.

La questione non è del tutto chiaro, ma penso che si vuole avere una lista (array) di hash, giusto?

In questo caso, si può semplicemente metterli in un array, che è come una lista in Java:

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

È possibile recuperare quei hash come elenco [0] e la lista [1]

Le liste in Ruby sono array. È possibile utilizzare Hash.to_a .

Se si sta tentando di combinare un hash con hash b, è possibile utilizzare Hash.merge

EDIT: Se si sta tentando di inserire un hash in hash b, si può fare

b["Hash a"] = a;

Tutte le risposte qui finora sono circa Hash Hash in, non Hash Hash più, quindi per ragioni di completezza, io carillon con questo:

# 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

Si noti che quando si uniscono B in A, tutte le chiavi che A aveva che sono in B vengono sovrascritte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top