Pergunta

Eu gostaria de salvar alguns objetos de hash em uma coleção (no mundo java, pense nisso como uma lista). Eu procuro on -line para ver se existe uma estrutura de dados semelhante no Ruby e não encontrei nenhuma. No momento, estou tentando salvar hash a[] em hash b[], mas tenho tido problemas tentando obter dados de hash b[].

Existem estruturas de dados de coleta interna no Ruby? Caso contrário, economizar um hash em outra prática comum de hash?

Foi útil?

Solução

Se estiver acessando o hash no hash que é o problema, tente:

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

Outras dicas

Não deve haver nenhum problema com isso.

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

Talvez você possa explicar quais problemas está encontrando.

A pergunta não está completamente clara, mas acho que você quer ter uma lista (matriz) de hashes, certo?

Nesse caso, você pode apenas colocá -los em uma matriz, que é como uma lista em Java:

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

Você pode recuperar aqueles hashes como a lista [0] e a lista [1

As listas em Ruby são matrizes. Você pode usar Hash.to_a.

Se você está tentando combinar hash a com hash b, você pode usar Hash.merge

Editar: se você está tentando inserir hash a no hash b, você pode fazer

b["Hash a"] = a;

Todas as respostas aqui até agora são sobre hash no hash, não hash mais hash; portanto, por razões de completude, eu vou entrar com isso:

# 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

Observe que, quando você se fundir em A, qualquer chave que A possui que está em B é substituída.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top