2013-02-07 5 views
2

조건이 충족 될 때 해시 키 값을 배열에 추출하고 싶습니다. 예를 들어, 해시 시간에 나는 값이 "true"로있는 키를 추출 할 :해시 값에 조건부로 배열하는 루비 해시 키

h.map {|k,v| k if v==true} - [nil] 

모든 대안 :

h = { :a => true, :b => false, :c =>true } 

나는이 함께 왔어요?

+0

지도 및 선택 방법은 별칭 할 수 있습니다. – sbagdat

+2

@sbagdat, 정확히 말하면,'map'과 *'collect' *는'select'가 아닌 별칭입니다. ['select'] (http://apidock.com/ruby/Hash/select)는 다른 작업을 수행하며 해시가 다른 유형을 반환하는 경우 해시를 반환하고 map/collect는 Array를 반환합니다. – NIA

+0

죄송합니다, 저의 실수입니다. – sbagdat

답변

10
h.select { |_, v| v }.keys 

동일하지만 더 읽기 쉬운 방식으로 수행합니다. 당신이 그들 중 하나를 사용할 수 있도록

+0

감사합니다. 그러나 배열을 반환하려면 to_a를 사용해야합니다. – DavB

+1

'keys'는'Array'를 반환합니다. 그 밖의 무엇을 돌려 줄까요? –

+0

@ Joerg. 네, 저의 실수입니다. 감사. – DavB

0

또한,

s = {} 
h.each do |k,v| 
    s[k] = v if v==true 
end