检查数组中所有元素是否为零的方法是什么?

时间:2018-04-05 06:53:26

标签: arrays ruby

我想知道除了数组中的nil值之外是否还有其他内容。

arr = [nil, nil, nil, nil] # => true
arr = [nil, 45, nil, nil] # => false

可能有任何类型的值(不仅是45)。

3 个答案:

答案 0 :(得分:7)

使用Enumerable#all?方法:

p arr.all? { |x| x.nil? }

或者

p arr.all?(&:nil?)

正如@Stefan建议的那样,

 p arr.all?(NilClass) #works only for Ruby 2.5

答案 1 :(得分:6)

你可以arr.compact.empty?compact为你排除所有nil

您可以在ruby guides阅读此处,了解Array

上的所有方法

答案 2 :(得分:2)

您还可以使用#any?方法进行数组

[nil, 45].any?
=> true
[nil, nil].any?
=> false

来自文档:

  

如果没有给出块,Ruby会添加一个{| obj |的隐式块obj}(即任何?如果至少有一个集合成员不是false或nil,则返回true。

注意:如果存在false布尔值,则无法工作。

[nil, false].any?
=> false # It should return `true`

其他选择是:

arr = [nil, nil, 45]
arr.count(nil) == arr.length
=> false

(arr - [nil]).empty?
=> false