다른 해시 공통 연습에서 해시를 저장하고 있습니까?
-
13-09-2019 - |
문제
해시 객체를 컬렉션에 저장하고 싶습니다 (Java 세계에서는 그것을 목록으로 생각합니다). 루비에 비슷한 데이터 구조가 있는지 확인하기 위해 온라인으로 검색하고 아무것도 찾지 못했습니다. 지금은 해시를 구하려고했던 순간 a[]
해시로 b[]
, 그러나 해시에서 데이터를 얻는 데 문제가 발생했습니다. b[]
.
루비에 내장 수집 데이터 구조가 있습니까? 그렇지 않다면 다른 해시 공통 관행에 해시를 저장하고 있습니까?
해결책
해시에서 해시에 액세스하는 경우 문제가됩니다.
>> 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]
목록 [0]과 같은 해시를 검색하고 목록 [1]을 검색 할 수 있습니다.
루비의 목록은 배열입니다. 당신이 사용할 수있는 Hash.to_a.
해시 A를 해시 B와 결합하려는 경우 사용할 수 있습니다. Hash.merge
편집 : 해시 A를 해시 B에 삽입하려는 경우 할 수 있습니다.
b["Hash a"] = a;
지금까지 모든 답변은 해시가 아닌 해시의 해시에 관한 것이므로 완전성 때문에 다음과 같이 할 것입니다.
# 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에있는 키를 덮어 씁니다.
제휴하지 않습니다 StackOverflow