web-dev-qa-db-ja.com

PowerShellで配列の配列に配列を追加する

ディスク上にあるCSVファイルを使用して、プログラムでPowerShellで多次元配列を作成しようとしています。配列を一時変数にインポートしてから、配列に配列を追加しています。配列の配列の代わりに、合計行数を持つ単一の配列を取得します。私は小さなアレイでそれを解決し、次のことを見つけました:

$array1 = "11","12","13"
$array2 = "21","22","23"
$array3 = "31","32","33"

$arrayAll = $array1, $array2, $array3
$arrayAll.Count # returns 3

$arrayAll = @();
$arrayAll += $array1
$arrayAll += $array2
$arrayAll += $array3

$arrayAll.count # returns 9

配列を構築する最初の方法は機能しますが、2番目の方法を使用できる必要があります。どうすれば修正できますか?

44

これはよくある落とし穴です。配列(および他のコレクション)が「予期せず」展開される可能性があります。カンマ演算子を使用します(単一の項目で配列を作成/強制し、展開を回避します)。

$array1 = "11","12","13"
$array2 = "21","22","23"
$array3 = "31","32","33"

$arrayAll = $array1, $array2, $array3
$arrayAll.Count # returns 3

$arrayAll = @()
$arrayAll += , $array1
$arrayAll += , $array2
$arrayAll += , $array3

$arrayAll.count # returns 3

$arrayAll[1] # gets "21","22","23", i.e. $array2
83
Roman Kuzmin

何を探しているのかわかりませんが、助けになるでしょう。

PS> $arrayAll = New-Object int[][] (3,3)
PS> $arrayAll[0] = $array1
PS> $arrayAll[1] = $array2
PS> $arrayAll[2] = $array3

PS> $arrayAll.Count
3

PS> $arrayAll[1][2]
23

これは、配列の配列をコーディングする方法です。

2次元の配列をコーディングする方法を次に示します

PS> $arrayAll = New-Object 'int[,]' (3,3)
PS> $arrayAll[2,0] = 12
4
JPBlanc