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

时间:2010-11-27 17:28:40

标签: ruby hash

检查Ruby哈希中是否定义了所有对象(不是nil)的最佳方法是什么?

如果散列中至少有一个元素为nil,则该语句应返回false。

4 个答案:

答案 0 :(得分:37)

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

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

或者

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

如果你还想检查,所有的密钥都是非零的,你可以修改为:

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

答案 1 :(得分:10)

另一种方式:

!hash.values.include? nil

答案 2 :(得分:2)

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

答案 3 :(得分: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