2014-10-13 1 views
0
@ dictionary = {"cat"=>"Sam"} 

이 반환이 값을 반환루비 사전 요소를 반환하는 방법?

@dictionary.key(x) 

키 I 전체 요소 "고양이"=> "샘"

+0

우리는 루비의 해시 호출을하지 사전 . –

+0

''cat "=>"Sam "'은 한 쌍, 즉''cat"'과''Sam "'의 두 요소입니다. 단일 객체로 반환 될 수 없습니다. – Stefan

답변

1
@dictionary 
을 반환하려면 어떻게

@dictionary[x] 

이 당신을 속일 수 있습니다

루비에서 마지막으로 평가 된 표현식은 무엇이든 메소드의 반환 값입니다. 해시를 전체적으로 반환하려는 경우. 메서드의 마지막 줄은 위에 쓴 내용과 같아야합니다.

+0

@ 사전은 전체 사전을 반환하겠습니까? 난 단지 1 요소를 반환하고 싶습니다 – user1854438

+0

당신이 그것을 이해하지 못했습니다.'@dictionary = { "cat"= ""Sam "}'줄은'@ dictionary'라는 이름의 인스턴스 변수가 있다는 것을 의미합니다. '{ "cat"=> "Sam"}' – aelor

0

해시의 한 요소를 반환하려면 h 요소를 식별하는 데 키를 지정해야합니다. 키 k의 값이 h[k]이므로 키 - 값 쌍 (배열로 표시됨)은 [k, h[k]]입니다. 단일 요소로 해시를 만들려면 Hash[[[k, h[k]]]]을 사용하십시오. 예를 들어

,

h = { "cat"=>"Sam", "dog"=>"Diva" } 

당신은 키 "cat"를 가진 요소를 원한다면, 그 것

["cat", h["cat"]]   #=> ["cat", "Sam"] 

또는

당신이 양자 택일 할 수 루비 2.1
Hash[[["cat", h["cat"]]]] #=> {"cat"=>"Sam"} 

이렇게 해시를 얻으십시오 :

[["cat", h["cat"]]].to_h #=> {"cat"=>"Sam"} 

좀 더 재미있는 사례를 살펴 보겠습니다. 해시 h의 일부 또는 모든 키를 포함하는 배열 arr이 있다고 가정합니다. 그런 다음, 예를 들어,

arr.zip(arr.values_at(*arr)) 

한다고 가정

h = { "cat"=>"Sam", "dog"=>"Diva", "pig"=>"Petunia", "owl"=>"Einstein" } 

arr = ["dog", "owl"] 

을 : 그럼 당신은 방법 Enumerable#zipHash#values_at를 사용하여 그 키에 대한 모든 키 - 값 쌍을 얻을 수 있습니다 :

arr.zip(h.values_at(*arr)) 
    #=> [["dog", "Diva"], ["owl", "Einstein"]] 
단계 (210)

:

a = h.values_at(*arr) 
    #=> h.values_at(*["dog", "owl"]) 
    #=> h.values_at("dog", "owl") 
    #=> ["Diva", "Einstein"] 
arr.zip(a) 
    #=> [["dog", "Diva"], ["owl", "Einstein"]] 

대신 해시로 표현 :

Hash[arr.zip(h.values_at(*arr))] 
    #=> {"dog"=>"Diva", "owl"=>"Einstein"} 
0

귀하의 예이다 조금 의미에서 오해의 소지 단지 (반드시 잠시되지 않음) 한 쌍의 (?) , 당신은 한 쌍을 얻고 싶습니다."사전"이라고하는 것은 사실 해시 맵입니다 (Ruby 중 해시라고 함).

해시 테이블 (=>)은 해시 정의 구문의 일부입니다. 그것 밖에 사용할 수 없습니다. 즉, 새 해시를 생성하지 않고 한 쌍만 얻을 수는 없습니다. 그래서 새로운 쌍은 다음과 같이 보일 것입니다 : { key => value }.

이렇게하려면 코드의 맥락에서 키와 값이 필요합니다. 그리고 가지고 있다면 둘 다 얻을 수있는 방법을 지정했습니다. 당신은 단지 다음 값이있는 경우 :

{ @dictionary.key(x) => x } 

을 ... 그리고 경우 단지 키 :

{ x => @dictionary[x] } 

... 그러나 실제적인 필요성이 거기에 없습니다. 당신이 해시의 각 쌍을 처리하려는 경우, 인수 목록으로 몇 가지 코드로 각 쌍을 공급하는 반복자를 사용합니다 코드의

@dictionary.each do |key, value| 
    # do stuff with key and value 
end 

이 방법으로 블록 해시 번 에서 각 쌍을 얻을 것이다.

그렇지 해시를 얻고 싶은 경우에, 그러나 요소의 쌍은은으로 구성, 당신은 배열에 해시를 변환 할 수 있습니다

@dictionary.to_a 
# => [["cat", "Sam"]] 
# Note the double braces! And see below. 
# Let's say we have this: 
@dictionary2 = { 1 => 2, 3 => 4} 
@dictionary2[1] 
# => 2 
@dictionary2.to_a 
# => [[1, 2], [3, 4]] 
# Now double braces make sense, huh? 

그것은 쌍의 배열을 (배열뿐만 아니라있는) 반환 해시 맵에 포함 된 모든 요소 (키 및 값)

0
당신은 한 번에 키와 값 얻을 수

- 배열 결과 : 값으로 검색

@h = {"cat"=>"Sam", "dog"=>"Phil"} 
key, value = p h.assoc("cat") # => ["cat", "Sam"] 

사용 rassoc (.rassoc("Sam"))