什么是查看所有元素是否为零的最短方式?

时间:2011-04-01 23:39:07

标签: ruby enumerable

有更直接的方法吗?

[1, nil, 2, 'a'].all? {|x| x}

5 个答案:

答案 0 :(得分:6)

使用include?并在开头添加“not”:

![1, nil, 2, 'a'].include?(nil)

如果所有元素都是非零,则数组不包含nil。使用.all?意味着您必须扫描整个数组,.include?应该在找到匹配时立即停止,并且没有调用块的开销;所以,.include?应该更快,但性能差异可能会非常相关,除非你有一个庞大的阵列。我会选择最适合你的那个。

答案 1 :(得分:5)

另一种可能性是any?none?方法,并使用nil?方法:

irb(main):005:0> [1, nil, 2, 'a'].any?(&:nil?)
=> true
irb(main):006:0> [1, nil, 2, 'a'].none?(&:nil?)
=> false

&:foo语法可以替换以下内容:list.each() {|x| x.foo()}

答案 2 :(得分:4)

你在打高尔夫吗?

这就像你要得到的一样简短直接。就个人而言,我更喜欢一种稍微冗长的方式:

[...].all? {|x| !x.nil? }

答案 3 :(得分:0)

我想你可以做::

!list.any?(&:nil?)

但我发现它不如原始代码那么直接。但是,如果您不喜欢块,则会隐藏&符号

中的块

[嗯,你原来的代码有一个问题,那就是{| x | x}对于nil和false值都计算为false。如果你真的想要块{| x | !x.nil?}]

答案 4 :(得分:0)

几乎与mu太短相同,我认为我没有比它更好,但只是另一种变体:

![1, nil, 2, 'a'].index(nil)