2011-10-12 4 views
1
values = [] 
values << [ '1', 'one'] 
values << [ '2', 'two'] 
values << [ '3', 'three'] 

one = '1' 

puts values[one] 

위의 줄은 예외를 throw합니다.해시 테이블에서 특정 값을 가져 오는 방법

+0

배열이 아니며 [this] (http://www.youtube.com/watch?v=01NHcTM5IA4)는 배열입니다. (youtube link)'values.class'를 사용하여'values'의 클래스를 얻을 수 있습니다. –

+0

@Andrew Grimm : 배열이라고 확신합니다. 'values.class'조차 그렇게 말합니다. –

+0

@undur_gongor : 네가 맞아, "해시 테이블이 아니고 해시 테이블"이라고 말했어 야했다. 해학적 인 말을하려고 할 때 나를 올바르게 응원합니다. –

답변

4

배열을 정의 했으므로 해시를 원합니다.

values = {} 
values['1'] = 'one' 
values['2'] = 'two' 
values['3'] = 'three' 

one = '1' 
values[one] #=> 'one' 

물론 당신이 작성해야한다 :

해시 테이블이 아니다
values = { 
'1' => 'one', 
'2' => 'two', 
'3' => 'three', 
} 

one = '1'  
values[one] #=> 'one' 
3

; 그것은 배열입니다. [['1', 'one'], ['2', 'two'], ['3', 'three']]

당신이 찾고 있던 코드는 다음과 같습니다 : 다른 사람처럼

values = {'1' => 'one', '2' => 'two'} 
values['3'] = 'three' 

one = '1' 

puts values[one] # => 'one' 
1

는 지적, 그 정말로 해시 테이블의 이상과 같은 2 차원 배열 values은 가치가있다. 이런 식으로 값을 검색하는 것은 효과적이지 않지만. 접근은 이러한 구조에서 값

values.select { |entry| entry[0].eql? '1' }[0][1] 
+0

또한 #assoc을 사용하여 이러한 종류의 배열에서 값을 가져올 수 있습니다. 예 :'values.assoc (one) .last' –

1

당신은 해쉬 키 값 쌍의 어레이를 변환 할 수 있었다 얻었다 :

values = [] 
values << [ '1', 'one'] 
values << [ '2', 'two'] 
values << [ '3', 'three'] 

hash = Hash[values] 
hash['1'] # => "one" 

at this ruby-doc.org page을 설명하는 Hash.[] 방법을 사용한다.

관련 문제