2012-11-10 24 views
11

元素添加到陣列我沒有太多的PowerShell的經驗,但,我試圖教我,因爲我沿着如何動態地在PowerShell中

去我試圖做的概念代碼一些證據一個更大的項目,這裏的主要目標是動態創建並使用函數向數組添加元素。

這裏是我的代碼:

$testArray = @() 
function addToArray($Item1) 
{ 
    $testArray += $Item1 
    "###" 
} 

$tempArray = "123", "321", "453" 
$foldertest = "testFolder" 

foreach($item in $tempArray) 
{ 
    addToArray $item 
} 
"###" 

功能完成數組變空每次。 記住我的大部分編程經驗來自java,php,一些C和C++只是僅舉幾例,如果我在php中做了這個(調整語言的語法當然),這將工作得很好

+1

爲什麼不是使用列表來代替?數組從未被動態地操作。每次調整數組大小時,都會在後臺創建一個新數組。所以你得到與其大小成正比的開銷。 – Neolisk

+0

感謝neolisk的建議,我確實認爲,我會給它一個鏡頭。 – icomeinpieces

回答

6
$testArray = [System.Collections.ArrayList]@() 
$tempArray = "123", "321", "453" 

foreach($item in $tempArray) 
{ 
    $arrayID = $testArray.Add($item) 
} 
10

問題是範圍之一;在你的addToArray函數中改變這一行:

$script:testArray += $Item1 

...存儲到你期待的數組變量中。

+2

感謝您的幫助,這種方法爲我工作。 – icomeinpieces

+0

同樣在這裏,謝謝! – JoeRod

+2

請注意,此方法的缺點是它會使用其中的新項目創建整個現有陣列的內存中副本。換句話說,它是O(2n)的內存使用量。如果你這麼做或者使用非常大的陣列,它變得非常昂貴。使用ArrayList重用相同的對象,並直接將其添加到它。 –

0

而不是重新建立在每次循環迭代數組(這基本上是什麼每次添加到它的時候發生的事情),分配循環的變量的結果:

$testArray = foreach($item in $tempArray) 
{ 
    addToArray $item 
} 
+0

感謝您的建議,我可能會嘗試,下一次我去做一個複雜的腳本 – icomeinpieces