Является ли сохранение хеша в другом хеше обычной практикой?
-
13-09-2019 - |
Вопрос
Я хотел бы сохранить некоторые хеш-объекты в коллекции (в мире Java это можно назвать списком).Я искал в Интернете, есть ли подобная структура данных в Ruby, и не нашел ее.На данный момент я пытаюсь сохранить хеш a[]
в хеш b[]
, но возникли проблемы при попытке получить данные из хеша b[]
.
Есть ли в Ruby встроенные структуры данных коллекций?Если нет, то является ли сохранение хеша в другом хеше обычной практикой?
Решение
Если проблема заключается в доступе к хешу в хеше, попробуйте:
>> p = {:name => "Jonas", :pos => {:x=>100.23, :y=>40.04}}
=> {:pos=>{:y=>40.04, :x=>100.23}, :name=>"Jonas"}
>> p[:pos][:x]
=> 100.23
Другие советы
С этим не должно быть никаких проблем.
a = {:color => 'red', :thickness => 'not very'}
b = {:data => a, :reason => 'NA'}
Возможно, вы могли бы объяснить, с какими проблемами вы столкнулись.
Вопрос не совсем ясен, но я думаю, вам хочется иметь список (массив) хэшей, верно?
В этом случае вы можете просто поместить их в один массив, который похож на список в Java:
a = {:a => 1, :b => 2}
b = {:c => 3, :d => 4}
list = [a, b]
Вы можете получить эти хеши, например list[0] и list[1]
Списки в Ruby — это массивы.Вы можете использовать Хэш.to_a.
Если вы пытаетесь объединить хэш a с хешем b, вы можете использовать Хэш.слияние
РЕДАКТИРОВАТЬ:Если вы пытаетесь вставить хэш a в хеш b, вы можете сделать
b["Hash a"] = a;
Все ответы здесь до сих пор касаются Hash in Hash, а не Hash плюс Hash, поэтому для полноты картины я добавлю следующее:
# 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
Обратите внимание, что когда вы объединяете B с A, любые ключи, которые были у A и которые находятся в B, перезаписываются.