array.nil?当数组只有多个`nil`值时

时间:2018-02-15 06:54:57

标签: arrays ruby

考虑一个只有一个值nil

的数组
array = [nil]

有没有更好的方法来检查数组是否为nil,如array.nil?

这有效:

array == [nil]

但是如果数组中有多个nil值呢?

array = [nil, nil, nil]

以下是要求:

array = [1, 2] if array.nil?

array.nil?也应该给出真实的'何时array = [nil, nil, nil]

3 个答案:

答案 0 :(得分:3)

您可以使用Array#any?检查数组是否包含至少一个非falsenil的值:

array = [1,2] unless array.any?

如果允许array包含false并且您只对nil感兴趣,那么Array#any?需要一个块:

array = [1,2] unless array.any?{|i| !i.nil?}

<强>更新

正如@ mu-is-short-short所暗示的那样,更好的版本是:

array = [1,2] if array.all?(&:nil?)

它完全符合您的需要:Enumerable#all?如果块返回数组所有元素的true-ish值,则返回true

答案 1 :(得分:2)

一种选择是统一你的阵列,然后做你已经在做的事情:

array.uniq == [nil]

因此,如果array是任意数量的nils,那么它就是真的。另一方面:

array.nil?

检查数组本身是否为nil,这与包含nil元素的数组不同。

答案 2 :(得分:0)

其中一种可能的方法是使用.compact删除nil值并检查结果是否为empty?

array = [1, 2] if array.compact.empty?