2011-04-20 63 views
5

我需要使用Perl處理大量數據。 在某些點上,我需要在主數組中插入第二個數組的值。 我已經看到,拼接通常應該是要走的路。然而,經過一番研究,我發現這個功能是內存密集型的,隨着時間的推移可能會導致嚴重的性能問題。將數組中的多個值插入到另一個數組中

這基本上就是我需要做的事情 -

# two arrays 
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
@second = [a, b, c, d e]; 

現在,插入的@second內容爲@primary在偏移4獲得 - 用

@primary = [1, 2, 3, 4, a, b, c, d, e, 5, 6, 7, 8, 9]; 

會當我必須處理一個擁有超過2000個元素的主數組時,鏈表是最有效的方式嗎?

注:誰能確認這是做

$Tail = splice($primary, 4); 
push(@primary, @second, $Tail); 

正確的方法是什麼?

+9

不要做過早的優化。將它拼接起來,如果(不是當)引起問題,那麼就開始尋找更深奧的解決方案 – Oesor 2011-04-20 15:20:30

回答

7
splice @primary, 4, 0, @second; 
+0

簡短而甜美。 +1 – Axeman 2011-04-20 19:41:42

1

這是一個「正確」的方式來執行它insofaras它的工作。但是,這可能不是最直接的方式。

#!/usr/bin/perl -l 

use Data::Dump qw(dump); 

my @pri = (1..9); 
my @sec = ('a'..'e'); 

print "pri = ", dump(\@pri); 
print "sec = ", dump(\@sec); 

splice @pri, 4, 0, @sec; ### answer 

print "now pri = ", dump(\@pri); 

這顯示:

$ perl x.pl 
pri = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
sec = ["a", "b", "c", "d", "e"] 
now pri = [1, 2, 3, 4, "a", "b", "c", "d", "e", 5, 6, 7, 8, 9] 

這是你在找什麼。即使在2k元素,你也許會發現這個Fast Enough(TM)。

+0

謝謝你。 另一個精度 - 我將處理座標,將它們擴展到多邊形緩衝區。這意味着對於2K座標線,我會做2K次插入。 你覺得我們應該仍然可以表現嗎? – Simon 2011-04-20 16:10:54

+0

@Simon是的,因爲無論如何數組只能有標量(引用仍然是標量),所以你不移動對象或數組,只是移動引用。與往常一樣,唯一確定的方法就是對其進行基準測試。 – Tanktalus 2011-04-20 19:11:33

0
# two arrays 
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
@second = [a, b, c, d e]; 

這並不是你要求的那樣做。有

# Store a list of values in an array 
@primary = (1, 2, 3, 4, 5, 6, 7, 8, 9); 

而且

# Store a list of values in an anonymous array 
# Then store a reference to that array in another array 
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

我希望這只是一個抄寫錯誤之間的一個重要區別,但它是值得的情況下,其他人試圖複製你的代碼指着這些東西。

而且,爲了將來的參考,請將代碼剪切並粘貼到Stack Overflow的問題中。如果你重新輸入它,你有可能會弄錯它,並會讓那些試圖幫助你的人感到困惑。

相關問題