2017-10-10 15 views
0

배열에 정수를 매핑하는 해시가 있습니다. 내가 값은 1의 배열의 크기를 가지고있는 항목을 찾을 때까지 예를 들어일치하는 요소를 찾을 때까지 어떻게 해시를 반복합니까?

{1 => ["abc"], 2 => ["ccc", "ddd"]} 

어떻게 해시를 통해 반복합니까? 일반적으로 할 수 있습니다

arr.detect{|element| element.size == 1} 

하지만 배열에서만 작동합니다. 비슷한 논리를 해시에 적용하는 방법을 잘 모르겠습니다.

+1

[이전 질문에 대한 답변] (https://stackoverflow.com/a/46656045/477037)을보십시오 - 해시 가져 오기 ** 이 메소드에서 두 개의 인수 **, 키와 그 값, 즉'detect {| k, v | ...}' – Stefan

답변

2

같은 원리가 적용

key, value = h.find do |_, l| 
    l.size == 1 
end 
# => [ 1, ["abc"]] 
key 
# => 1 
value 
# => ["abc"] 

만 값을 걱정한다면, 그것도 쉽게 : 이제

h = {1 => ["abc"], 2 => ["ccc", "ddd"]} 

h.find do |_, l| 
    l.size == 1 
end 
# => [ 1, ["abc"]] 

당신이 찾고 있다면 더 유용한 변수 세트로 :

list = h.values.find do |l| 
    l.size == 1 
end 
+1

'do ... end' 구문은 할당과 매우 짧은 블록 내용을 감안할 때 약간 이상합니다. – Stefan

+0

@Stefan'{...}'의 긴 형식의 버전입니다. 내부에서 일어나는 일이 그 자체의 선에 노출되어 있기 때문에 훨씬 더 명확 해집니다. 또한 주석을 쉽게 추가 할 수 있습니다. – tadman