如何确认哈希中的所有元素都已定义?

7lrncoxx  于 2022-10-15  发布在  Ruby
关注(0)|答案(5)|浏览(124)

检查Ruby散列中的所有对象是否都已定义(不是nil)的最佳方法是什么?
如果散列中至少有一个元素为空,则该语句应返回FALSE。

von4xj4u

von4xj4u1#

可以使用all?检查给定的 predicate 对于可枚举表中的所有元素是否为真。所以:

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

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

如果您还想检查,所有密钥也都是非空的,您可以将其修改为:

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

vhmi4jdf2#

另一种方式:

!hash.values.include? nil
wljmcqd8

wljmcqd83#

Enumerable#all?方法完全符合您的需要。

k2fxgqgv

k2fxgqgv4#

定义了一个为nil的元素(值)。它被定义为nil对象。
如果您想检查是否有任何密钥丢失,请执行以下操作:

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

yb3bgrhw5#

hash = { foo: nil, bar: nil, baz: nil }
hash.values.all?(nil) # true
!hash.values.all?(nil) # false

hash = { foo: 0, bar: nil, baz: nil }
hash.values.all?(nil) # false
!hash.values.all?(nil) # true

相关问题