确定二维Ruby数组是否为空的最有效方法是什么?

时间:2016-12-17 06:41:01

标签: arrays ruby

给出Ruby中的一个空数组:

a = [ [], [], [], [], [] ]

您可以使用以下方法确定所有子阵列阵列是否为空

a.uniq.length == 1                # Ignoring the flaw where sub-arrays are identical
a.index { |item| item != [] }.nil?
a.flatten.empty?
a.all? { |item| item.empty? }           # Fastest of the four

上述方法从最慢到最快列出。有没有比使用a.all? { |x| x.empty? }更快的方法。

1 个答案:

答案 0 :(得分:3)

当你找到一个更快的方式时,我会感到惊讶:

array.all? { |element| element.empty? }

如果我们看看它们是如何工作的,那将会有什么意义。如果它是空的,则查看每个元素,但是只要存在非空元素就会停止。这意味着它需要最多n个步骤并且不会更改数组。

而大多数其他示例都会更改数组。这意味着他们需要分配内存和复制数据。如果您首先操作数据,则需要完全n步骤以及之后的检查。

相关问题