8

Powershell で動的長配列 (ArrayLists / Lists) をどのように操作しますか? 基本的に、最も外側のインデックスの長さが不明な2D配列が必要です。

で配列を初期化しようとしまし$array = @()たが、これで何かに対処すると範囲外の例外が発生します。次に、記事で読んだように += オペランドを使用してみましたが、要素の追加ではなく文字列の連結になります。

例:

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

出力: 「Elem1x」ではなく「E」。

4

2 に答える 2

11

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

$array = @()
$array += ,@("Elem1x", "Elem1y")
$array += ,@("Elem2x", "Elem2y")
$array[0][0]
于 2012-10-12T14:11:21.677 に答える
10

クリスチャンの答えは 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]

ところで、オペレーター+=が行うことは、オペレーターの左側にあるオブジェクトのタイプによって異なります。文字列の場合は、文字列連結になります。オブジェクトが配列の場合、(新しい配列の作成/コピーを介して) 右側が配列に追加されます。

于 2012-10-12T15:04:43.380 に答える