2017-07-26 39 views
4

清除Haxe中Array的最高性能方法是什麼? 目前我正在分配變量持有數組到一個空的。 這是我在互聯網上找到:在Haxe中清除Array的正確方法是什麼?

public static function clear(arr:Array<Dynamic>){ 
     #if (cpp) 
      arr.splice(0,arr.length); 
     #else 
      untyped arr.length = 0; 
     #end 
    } 

這是最好的辦法嗎? 我關心兩個目標:js和cpp。

回答

6

大多數情況下,您可以簡單地使用重新分配給空數組來清除數組;如果對數組的引用很重要,這隻會成爲問題。在那種情況下,你有什麼效果很好。

這就是它的答案,但出於好奇的緣故,我決定嘗試計算一些清除數組的方法。不幸的是,我有一段時間沒有使用過Haxe,而且我的電腦配置中的某些內容必須改變,所以我現在只能編譯爲Neko和HTML5。無論如何,結果都很有趣。

對於測試,我運行了四種不同的清晰算法,通過長度從8到1048576整數的數組。該算法如下:

拼接清除:

array.splice(0, array.length); 

長度清除:

untyped array.length = 0; 

分配清除:

array = []; 

流行清除:

while (array.length > 0) 
    array.pop(); 

下面顯示的所有時間表示執行相同操作100萬次所花費的總時間。

在ネ:

  • 熔接:0.51秒
  • 長度:0.069秒
  • 分配:0.34秒
  • 流行:0.071到0.179秒(鱗線性隨着陣列變大)

在HTML5:

  • 熔接:0.29秒
  • 長度:0.046秒
  • 分配:0.032秒
  • 流行:0。012秒

這些測試是在64位Windows 7機器和Firefox上運行的。

我有點驚訝while循環方法是javascript中的禁食算法;它讓我覺得那裏正在發生着一些事情。否則,在支持它的平臺上,長度方法很好。

我的測試是在Github的情況下,如果有人想同行審查的方法,也許嘗試在除了Neko和HTML5以外的平臺上的測試。

+3

'array = [];'創建一個新實例,如果您引用了舊數組,則可能會導致意外的結果。 –

相關問題