回答:
$array.Add()
-メソッドを使用すると、要素を既存の配列に追加しようとしています。配列は固定サイズのコレクションであるため、拡張できないためエラーが発生します。
$array += $element
古いものと同じ要素と新しい項目を持つ新しい配列を作成し、この新しい大きな配列が$array
-variableの古い配列を置き換えます
+ =演算子を使用して、要素を配列に追加できます。これを使用すると、Windows PowerShellは実際には、元の配列の値と追加された値で新しい配列を作成します。たとえば、$ a変数の配列に値が200の要素を追加するには、次のように入力します。
$a += 200
出典:about_Arrays
+=
は高価な操作であるため、多くのアイテムを追加する必要がある場合は、できるだけ少ない操作で追加するようにしてください。例:
$arr = 1..3 #Array
$arr += (4..5) #Combine with another array in a single write-operation
$arr.Count
5
それが不可能な場合は、List
orなどのより効率的なコレクションの使用を検討してArrayList
ください(他の回答を参照)。
List
またはを試してくださいArrayList
。彼らははるかに速くなります。私は個人的に使用し+=
、99%の時間を配列しています。通常、余分な秒数が問題にならない短い使い捨てスクリプトを作成するためです。最適化して時間を節約したい追加/削除の多い大きなスクリプトの場合、List
またはを使用しますArrayList
。
Add()
メソッドが存在する理由を誰かが知っていますか?
IList
です。トライはGet-Member -InputObject @()
これが表示されますAdd Method int IList.Add(System.Object value)
動的なサイズの配列が必要な場合は、リストを作成する必要があります。.Add()
機能が得られるだけでなく、@ frode-fで説明されているように、動的配列の方がメモリ効率が高く、とにかく優れた方法です。
そして、それはとても使いやすいです。
配列宣言の代わりに、これを試してください:
$outItems = New-Object System.Collections.Generic.List[System.Object]
アイテムの追加は簡単です。
$outItems.Add(1)
$outItems.Add("hi")
そして、完了時に本当に配列が必要な場合は、そのための関数もあります。
$outItems.ToArray()
Add()
機能を使ってみましたか?List
上記のように汎用オブジェクトを作成すると、Add()
およびRemove()
メソッドをそれぞれ使用して項目を追加および削除できる変更可能なリストがあることを確認できます。
(New-Object System.Collections.Generic.List[string]).GetType().Name
利回りList`1
。+=
(.Add()
メソッドを呼び出すのではなく)リストを含む変数に適用した可能性があります。その場合、変数の値は実際に配列(System.Object[]
)に変換されます。
$a = new-object collections.generic.list[object]