检查Ruby散列中的所有对象是否都已定义(不是nil)的最佳方法是什么?如果散列中至少有一个元素为空,则该语句应返回FALSE。
von4xj4u1#
可以使用all?检查给定的 predicate 对于可枚举表中的所有元素是否为真。所以:
all?
hash.values.all? {|x| !x.nil?}
或
hash.all? {|k,v| !v.nil?}
如果您还想检查,所有密钥也都是非空的,您可以将其修改为:
hash.all? {|k,v| !v.nil? && !k.nil?}
vhmi4jdf2#
另一种方式:
!hash.values.include? nil
wljmcqd83#
Enumerable#all?方法完全符合您的需要。
Enumerable#all?
k2fxgqgv4#
定义了一个为nil的元素(值)。它被定义为nil对象。如果您想检查是否有任何密钥丢失,请执行以下操作:
nil
hash = {:key1 => nil, :key2 => 42, :key3 => false} keys = [:key1, :key2, :key3] all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true
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
5条答案
按热度按时间von4xj4u1#
可以使用
all?
检查给定的 predicate 对于可枚举表中的所有元素是否为真。所以:或
如果您还想检查,所有密钥也都是非空的,您可以将其修改为:
vhmi4jdf2#
另一种方式:
wljmcqd83#
Enumerable#all?
方法完全符合您的需要。k2fxgqgv4#
定义了一个为
nil
的元素(值)。它被定义为nil
对象。如果您想检查是否有任何密钥丢失,请执行以下操作:
yb3bgrhw5#