2012-11-10 10 views
11

で配列に要素を追加する方法を、私はまだ多くのPowerShellの経験を持っていないと私は大きなプロジェクトのコンセプトコードのいくつかの証拠を作るしようとしている動的PowerShellの

に沿って行くように自分自身を教えるためにしようとしていますここでの主な目的は、関数を使って配列に要素をあまりにも動的に作成して追加することです。関数は、配列が空になった終わる

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

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

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

毎回:

は、ここに私のコードです。 私のプログラミング経験の大部分は、PHP、(もちろん言語の文法を調整して)このようにした場合、Java、PHP、CおよびC++のほんの一部を念頭に置いています。

+1

理由: – Neolisk

+0

アドバイスをいただきありがとうございますneolisk、私はそれを考えました、私はそれを撃つでしょう。 – icomeinpieces

答えて

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

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

問題がありますスコープの1つです。あなたのaddToArray関数の内部でこれを以下の行に変更します:

$script:testArray += $Item1 

...期待している配列変数に格納します。

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

助けてくれてありがとう、このメソッドは私のために働いた。 – icomeinpieces

+0

同じです、ありがとうございます! – JoeRod

+2

このメソッドの欠点は、新しい項目を含む既存の配列全体のメモリ内コピーを作成することです。つまり、O(2n)のメモリ使用量です。これをたくさんやったり、非常に大きな配列を使ったりすると、非常に高価になります。 ArrayListを使用すると、同じオブジェクトが再利用され、項目が直接追加されます。 –

0

代わりの再作成(基本的に何があなたがそれに追加するたびに起こっている)各ループの反復で配列を、変数へのループの結果を割り当てる

代わりにリストを使用しないでください。配列は動的に操作されることは決してありませんでした。配列のサイズを変更するたびに、新しい配列が作成されます。したがって、オーバーヘッドはそのサイズに比例します。
+0

アドバイスをいただきありがとうございます。次回は複雑なスクリプトを作成してみてください – icomeinpieces

関連する問題