2010-11-27 3 views

답변

32

을 사용하여 주어진 조건자가 열거 가능한 모든 요소에 대해 참인지 여부를 확인할 수 있습니다. 방법은 않습니다

hash.all? {|k,v| !v.nil? && !k.nil?} 
+6

'모든'자동 (배열) 요소가 nil이 아닌이 있는지 확인하기 때문에 값 체크는'hash.values.all?'로 축소 될 수 있고, 키 + 값은'hash.flatten.all? '으로 체크됩니다! –

+2

@ 글렌 :별로. 그들은 진실임을 확인합니다. 'false'는'nil'이 아니라 진실이 아닙니다. – sepp2k

+0

루비 1.8.7 이상 또는 레일즈를 사용한다면'! hash.values.any? (& : nil?)'. –

2

Enumerable#all? : 그래서 :에

hash.values.all? {|x| !x.nil?} 

또는

hash.all? {|k,v| !v.nil?} 

당신은 또한 확인하고 싶은 경우, 모든 키뿐만 아니라 nil이 아닌, 당신은 그것을 수정할 수 있습니다 정확히 당신이 필요로하는 것.

10

다른 방법 :

!hash.values.include? nil 
+4

BTW, 레일즈에서 더 나아졌습니다 :'hash.values.exclude? 닐' –

0

의 요소 (값) nil 인 정의된다. 그것은 nil 객체로 정의됩니다. 이 누락 된 키가 있는지 확인하고자하는 경우

, 다음을 수행하십시오? 블록없이

hash = {:key1 => nil, :key2 => 42, :key3 => false} 
keys = [:key1, :key2, :key3] 
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true 
관련 문제