2012-10-12 25 views
7

Powershellでどのように動的長さの配列(ArrayLists/Lists)を扱うのですか?私は基本的に、最も外側のインデックスの長さが不明な2D配列が必要です。Powershellで不明な長さの配列を埋め込むにはどうしたらいいですか?

$array = @()で配列を初期化しようとしましたが、これを処理する際にインデックスから範囲外の例外が発生します。それから、記事で読むと+ =オペランドを使ってみましたが、それは文字列の連結であり、要素の追加ではありません。

例:

$array = @() 
$array += @("Elem1x", "Elem1y") 
$array += @("Elem2x", "Elem2y") 
Echo $array[0][0] 

出力:代わりに "Elem1x" の "E"。

答えて

8

は、この方法を試してみてください:

$array = @() 
$array += ,@("Elem1x", "Elem1y") 
$array += ,@("Elem2x", "Elem2y") 
$array[0][0] 
+0

私は大きなエラーにあったので私の答えを編集しました! –

+0

カンマは実際に何を説明できますか? – Nilzor

+0

@Nilzorここをクリックしてください:http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx –

9

クリスチャンの答えは行くためのPowerShellの方法であり、(中サイズ配列に小)、ほとんどの場合のために素晴らしい作品。配列が大きい場合は、パフォーマンス上の理由からArrayListを使用することを検討することをお勧めします。つまり、アレイで+=を使用するたびに、PowerShellは新しい配列を作成し、古い内容を新しい配列にコピーし、新しい配列を変数に割り当てる必要があります。これは、.NET配列が固定サイズであるためです。ここでは、ArrayListのを使用してこれを行うことができます方法は次のとおりです。

$list = new-object system.collections.arraylist 
$list.Add(("Elem1x", "Elem1y", "Elem1z")) > $null 
$list.Add(("Elem2x", "Elem2y")) > $null 
$list[0][0] 

ところでオペレータ+=が何をするか演算子の左側にあるオブジェクトの種類によって異なります。それが文字列の場合、文字列の連結が得られます。オブジェクトが配列の場合、右辺が配列に追加されます(create new array/copyを使用)。

+1

また、私の経験では、多次元配列は、ここでは配列のarraylistなど、他のデータ構造よりも常に常に劣っています。しかし、私はちょうど多次元配列に対して偏見があるかもしれません:) – EBGreen