2016-12-17 56 views
0

鑑於空數組的數組在紅寶石:確定二維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? }更快的方法。

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

是什麼讓那種感覺如果我們看看它們是如何工作:

回答

3

當你找到一個更快的方法,因爲我會感到很驚訝。這看看每個元素是否爲空,但只要有非空元素就停下來。這意味着最多需要步驟並且不會更改該數組。

鑑於其他大多數示例都會更改數組。這意味着他們需要分配內存和複製數據。如果您先操作數據,那麼您將需要正好n步驟加上之後的檢查。

+0

是的,我想知道是否有一個聰明的方法來做到這一點比在最壞的情況下O(n)更快。 – ybakos

+0

我會爭辯說,如果你有一個數組,並且需要檢查是否有任何子數組不是空的,那麼沒有比'O(n)'更快的方法,因爲在最壞的情況下你必須檢查所有子數組。 – spickermann

+0

我看不出它會如何更快。 @spickermann:Minor nitpick:其他示例不會更改數組。他們創造一個新的,需要時間和記憶。 –

相關問題