Ruby 해시의 모든 객체가 정의되었는지 (nil이 아닌지) 확인하는 가장 좋은 방법은 무엇입니까?해시의 모든 요소가 정의되었는지 어떻게 확인합니까?
해시에있는 하나 이상의 요소가 nil이면 명령문은 false를 반환해야합니다.
Ruby 해시의 모든 객체가 정의되었는지 (nil이 아닌지) 확인하는 가장 좋은 방법은 무엇입니까?해시의 모든 요소가 정의되었는지 어떻게 확인합니까?
해시에있는 하나 이상의 요소가 nil이면 명령문은 false를 반환해야합니다.
을 사용하여 주어진 조건자가 열거 가능한 모든 요소에 대해 참인지 여부를 확인할 수 있습니다. 방법은 않습니다
hash.all? {|k,v| !v.nil? && !k.nil?}
Enumerable#all?
: 그래서 :에
hash.values.all? {|x| !x.nil?}
또는
hash.all? {|k,v| !v.nil?}
당신은 또한 확인하고 싶은 경우, 모든 키뿐만 아니라 nil이 아닌, 당신은 그것을 수정할 수 있습니다 정확히 당신이 필요로하는 것.
다른 방법 :
!hash.values.include? nil
BTW, 레일즈에서 더 나아졌습니다 :'hash.values.exclude? 닐' –
의 요소 (값) nil
인 정의된다. 그것은 nil
객체로 정의됩니다. 이 누락 된 키가 있는지 확인하고자하는 경우
, 다음을 수행하십시오? 블록없이
hash = {:key1 => nil, :key2 => 42, :key3 => false}
keys = [:key1, :key2, :key3]
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true
'모든'자동 (배열) 요소가 nil이 아닌이 있는지 확인하기 때문에 값 체크는'hash.values.all?'로 축소 될 수 있고, 키 + 값은'hash.flatten.all? '으로 체크됩니다! –
@ 글렌 :별로. 그들은 진실임을 확인합니다. 'false'는'nil'이 아니라 진실이 아닙니다. – sepp2k
루비 1.8.7 이상 또는 레일즈를 사용한다면'! hash.values.any? (& : nil?)'. –