PowerShell: 多次元配列の作成、データの追加・削除

PowerShellで2次元配列以上の多次元配列を実現する場合 2つの方法があります。 ここではジャグ配列と呼ばれる配列の中に配列を作成する方法で 多次元配列を作成し、 さらにデータを追加・削除する方法を紹介します。

サンプルデータとして、 次のような3行2列の表を配列にします。 列は番号と名前の2列です。

番号名前
1田中
2佐藤
3山田

多次元配列を作成

配列の中に配列を宣言することで多次元配列になります。

$arr = @((1, "田中"),(2, "佐藤"),(3, "山田"))

1行で記述してもいいのですが、 データが多い時は次のように 複数行で記述した方が見やすくなります。

$arr = @(
	(1, "田中"),
	(2, "佐藤"),
	(3, "山田")
)

Write-Host $arr

# 実行結果
1 田中 2 佐藤 3 山田

要素の参照

要素を参照する場合は[]をつなげて使用します。 例えば3行目・2列目の値を知りたい場合は「$配列名[2][1]」と記述します。

Write-Host $arr[2][1]

# 実行結果
山田

要素値の変更

要素値を変更したい場合は代入演算子を使い、 変更したい要素を左辺に、値を右辺に記述します。

$arr[2][1] = "高山"

データの追加

最初の3行分のデータに次の1行分のデータを追加します。

番号名前
4鈴木

+=演算子を使って、多次元配列$arrの末尾に1行分のデータを追加します。
重要なのは@の前にあるカンマ(,)を付け忘れないことです。 カンマがないとうまく追加されません。
最後にLengthプロパティで配列の要素数が4になっていることが確認できます。

$arr = @((1, "田中"),(2, "佐藤"),(3, "山田"))

$arr += ,@(4, "鈴木")

Write-Host $arr
Write-Host ("要素数: " + $arr.Length)

# 実行結果
1 田中 2 佐藤 3 山田 4 鈴木
要素数: 4

試しに@の前にカンマ(,)を付けずにデータを追加してみます。 要素数が5となって、 番号と名前が別々の行に追加されているのがわかります。

$arr = @((1, "田中"),(2, "佐藤"),(3, "山田"))

$arr += @(4, "鈴木")

Write-Host $arr
Write-Host ("要素数: " + $arr.Length)

foreach ($item in $arr) {
	Write-Host $item
}

# 実行結果
1 田中 2 佐藤 3 山田 4 鈴木
要素数: 5
1 田中
2 佐藤
3 山田
4
鈴木

データの削除

データを削除するには配列のスライス機能を使います。
(参考記事:配列のスライス

先頭行を削除する場合は次のように記述します。

$arr = @((1, "田中"),(2, "佐藤"),(3, "山田"))

Write-Host $arr

$arr = $arr[1..($arr.Length - 1)]

Write-Host $arr

Write-Host ("要素数: " + $arr.Length - 1)

# 実行結果
1 田中 2 佐藤 3 山田
2 佐藤 3 山田
要素数: 2

最終行を削除する場合は次のように記述します。

$arr = @((1, "田中"),(2, "佐藤"),(3, "山田"))

Write-Host $arr

$arr = $arr[0..($arr.Length - 2)]

Write-Host $arr

Write-Host ("要素数: " + $arr.Length)

# 実行結果
1 田中 2 佐藤 3 山田
1 田中 2 佐藤
要素数: 2

(まとめ記事: PowerShell 配列

PowerShell