2011-12-30 5 views
23

의 점점 값이 나는루비 - 해시

{:key1 => "value1", :key2 => "value2"}

같은 해시를하고 난 'key1' 또는 'key2' 같은 값을가집니다 변수 k 있습니다.

k의 값을 변수 v에 가져 오려고합니다.

if 또는 case을 사용하여이 문제를 해결할 수있는 방법이 있습니까? 단일 회선 솔루션이 바람직합니다. 도와주세요.

답변

57

키를 문자열에서 심볼로 변환하고 해시에서 조회를 수행합니다.

hash = {:key1 => "value1", :key2 => "value2"} 
k = 'key1' 

hash[k.to_sym] # or iow, hash[:key1], which will return "value1" 

레일은 이러한 경우에 매우 유용하다는 것을 증명 HashWithIndifferentAccess이라는 클래스를 사용합니다. 루비에 대한 질문 만 태그를 붙 였지만, Rails의 소스에서이 클래스의 구현을 훔쳐서 코드와 문자열을 코드베이스의 문자열 변환으로 피할 수있었습니다. 기호 나 문자열을 키로 사용하여 값에 액세스 할 수있게합니다.

hash = HashWithIndifferentAccess.new({:key1 => "value1", :key2 => "value2"}) 
hash[:key1] # "value1" 
hash['key1'] # "value1"