2009-06-15 2 views
2

컬렉션에 해시 객체를 저장하고 싶습니다. (자바 세계에서는 List로 생각합니다.) 온라인에서 Ruby에 비슷한 데이터 구조가 있는지 찾아보고 아무 것도 찾지 못했습니다. 잠시 동안 해시 a[]을 해시 b[]에 저장하려고했지만 해시가없는 데이터를 가져 오는 데 문제가 발생했습니다. b[].다른 해시 관행에 해시를 저장하고 있습니까?

루비에 내장 된 컬렉션 데이터 구조가 있습니까? 그렇지 않다면 다른 해시 일반적인 연습에서 해시를 저장하고 있습니까?

+2

몇 가지 코드를 보여 주시겠습니까? –

답변

3

다음 시도 :

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

목록은 배열입니다. Hash.to_a을 사용할 수 있습니다. 당신이 해시 B와 해시 A를 결합하려는 경우

, 당신은 Hash.merge

편집을 사용할 수 있습니다 : 당신이 해시 B에 해시 a를 삽입하려는 경우, 당신이 할 수있는

b["Hash a"] = a; 
+0

설명을 위해 : 병합은 두 개의 해시를 하나의 해시로 결합하고 하나의 해시를 값으로 다른 해시에 추가하지 않습니다. – Chuck

+0

오, 나는 그가하고 싶은 것을 오해했다. – CookieOfFortune

+0

글쎄, 나는 그것이 어떤 것인지 완전히 확신하지 못한다. 해시 안에있는 해시라고 생각하지만 확실하지 않습니다. – Chuck

2

이 shouldn 그게 어떤 문제가 아니야.

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

아마도 어떤 문제가 발생했는지 설명 할 수 있습니다. 이 문제가 해시의 해시를 접근 있다면

2

권리, 문제는 완전히 명확하지 않다,하지만 난 당신이 해시의 목록 (배열)를 갖고 싶어 생각하십니까?

이 경우

, 당신은 자바의 목록처럼 하나 개의 배열에 넣어 수 있습니다 : 당신은 목록 [0] 목록과 같은 그 해시를 검색 할 수 있습니다

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

[1]

1
여기

모든 해답은 지금까지 완성도의 이유로, 나는이에 차임거야, 그래서, 플러스 해시 해시하지 해시의 해시에 대해 다음과 같습니다

# 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를 병합, 어떤 키 그게 가지고있는 건 B에서 덮어 씁니다.

관련 문제