@ dictionary = {"cat"=>"Sam"}
이 반환이 값을 반환루비 사전 요소를 반환하는 방법?
@dictionary.key(x)
키 I 전체 요소 "고양이"=> "샘"
@ dictionary = {"cat"=>"Sam"}
이 반환이 값을 반환루비 사전 요소를 반환하는 방법?
@dictionary.key(x)
키 I 전체 요소 "고양이"=> "샘"
@dictionary
을 반환하려면 어떻게
@dictionary[x]
이 당신을 속일 수 있습니다
루비에서 마지막으로 평가 된 표현식은 무엇이든 메소드의 반환 값입니다. 해시를 전체적으로 반환하려는 경우. 메서드의 마지막 줄은 위에 쓴 내용과 같아야합니다.
@ 사전은 전체 사전을 반환하겠습니까? 난 단지 1 요소를 반환하고 싶습니다 – user1854438
당신이 그것을 이해하지 못했습니다.'@dictionary = { "cat"= ""Sam "}'줄은'@ dictionary'라는 이름의 인스턴스 변수가 있다는 것을 의미합니다. '{ "cat"=> "Sam"}' – aelor
해시의 한 요소를 반환하려면 h
요소를 식별하는 데 키를 지정해야합니다. 키 k
의 값이 h[k]
이므로 키 - 값 쌍 (배열로 표시됨)은 [k, h[k]]
입니다. 단일 요소로 해시를 만들려면 Hash[[[k, h[k]]]]
을 사용하십시오. 예를 들어
h = { "cat"=>"Sam", "dog"=>"Diva" }
당신은 키 "cat"
를 가진 요소를 원한다면, 그 것
["cat", h["cat"]] #=> ["cat", "Sam"]
또는
당신이 양자 택일 할 수 루비 2.1Hash[[["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#zip 및 Hash#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"}
귀하의 예이다 조금 의미에서 오해의 소지 단지 (반드시 잠시되지 않음) 한 쌍의 (?) , 당신은 한 쌍을 얻고 싶습니다."사전"이라고하는 것은 사실 해시 맵입니다 (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?
그것은 쌍의 배열을 (배열뿐만 아니라있는) 반환 해시 맵에 포함 된 모든 요소 (키 및 값)
- 배열 결과 : 값으로 검색
@h = {"cat"=>"Sam", "dog"=>"Phil"}
key, value = p h.assoc("cat") # => ["cat", "Sam"]
사용 rassoc
(.rassoc("Sam")
)
우리는 루비의 해시 호출을하지 사전 . –
''cat "=>"Sam "'은 한 쌍, 즉''cat"'과''Sam "'의 두 요소입니다. 단일 객체로 반환 될 수 없습니다. – Stefan