문제

해시 객체를 컬렉션에 저장하고 싶습니다 (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에있는 키를 덮어 씁니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top