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

krn*_*krn 13 ruby hash

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

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

sep*_*p2k 38

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

hash.values.all? {|x| !x.nil?}
Run Code Online (Sandbox Code Playgroud)

要么

hash.all? {|k,v| !v.nil?}
Run Code Online (Sandbox Code Playgroud)

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

hash.all? {|k,v| !v.nil? && !k.nil?}
Run Code Online (Sandbox Code Playgroud)

  • 没有块`all?`会自动检查(数组)元素是否为非nil,因此值检查可以简化为`hash.values.all?`,键+值检查为`hash.flatten.all ?`! (7认同)
  • @glenn:不太好.它检查它们是否真实.`false`不是'nil`,但它也不是真的. (2认同)

Mar*_*mas 10

其他方式:

!hash.values.include? nil
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,在Rails中它甚至更好:`hash.values.exclude?nil` (4认同)