Бих искал да запазя някои хеш предметиколекция (в света на Java мисля за нея като списък). Търся онлайн, за да проверя дали има подобна структура от данни в Ruby и не са открили такива. Засега се опитвах да спася хеш a[]
в хеш b[]
, но са имали проблеми, опитвайки се да получат данни от хеш b[]
.
Има ли вградени структури от данни за събиране на Ruby? Ако не, запазва хеш в друга често срещана практика на хеш?
Отговори:
3 за отговор № 1Ако има достъп до хеш в хеш, който е проблем, опитайте следното:
>> p = {:name => "Jonas", :pos => {:x=>100.23, :y=>40.04}}
=> {:pos=>{:y=>40.04, :x=>100.23}, :name=>"Jonas"}
>> p[:pos][:x]
=> 100.23
2 за отговор № 2
Не трябва да има никакъв проблем с това.
a = {:color => "red", :thickness => "not very"}
b = {:data => a, :reason => "NA"}
Може би бихте могли да обясните какви проблеми срещате.
2 за отговор № 3
Въпросът не е напълно ясен, но мисля, че искате да имате списък (масив) от хешове, нали?
В този случай можете просто да ги поставите в един масив, който е като списък в Java:
a = {:a => 1, :b => 2}
b = {:c => 3, :d => 4}
list = [a, b]
Можете да изтеглите тези хешове като списък [0] и списък [1]
1 за отговор № 4
Списъците в Ruby са масиви. Можеш да използваш Hash.to_a.
Ако се опитвате да комбинирате хеш а с хеш б, можете да го използвате Hash.merge
EDIT: Ако се опитвате да вмъкнете хеш в хеш б, можете да го направите
b["Hash a"] = a;
1 за отговор № 5
Всички отговорите дотук са за хеш в хеш, а не хеш плюс хеш, така че заради изчерпателност, аз ще викам с това:
# 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, всички ключове, които А са в B, се заличават.