PowerShell: 配列のループ処理 3通り

PowerShellで配列をループして各要素を取得する処理には いくつか方法があります。
最も使われるのはforeachを使ってのループ、 配列のインデックスを管理したいならforループ、 そして意外と知られていないのがswitchでのループです。 ここではそれぞれの方法について解説します。

foreachによるループ

配列をループするのに最もシンプルなのがforeach文でのループです。

次のコードでは、 foreachを使って配列$arrをループして要素内容を表示しています。 foreach文ではinの左側の変数に各要素が入り、 inの右側にループしたい配列等のオブジェクトを指定します。

$arr = "a", "b", "c"

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

# 実行結果
a
b
c

forによるループ

for文でのループは配列のインデックスを管理できるのがメリットになります。 ループの最中に、 インデックスで処理を分岐したい場合等はfor文を使うと便利です。

次のコードはfor文とif文を使って、 配列のインデックスが偶数の場合(要素の順番は奇数)のみ要素を表示しています。

$arr = "a", "b", "c"

for ($i = 0; $i -lt $arr.Length; $i++) {

	if (($i % 2) -eq 0){
		Write-Host $arr[$i]
	}
}

# 実行結果
a
c

switchによるループ

switch文でループを行うこともできます。 switchの後に配列を指定するだけです。 配列内の各要素によって処理を分岐したい場合には便利です。

次のコードはswitch文を使ったループの例です。 要素値がa, b, cの場合とそれ以外の場合に分岐しています。 要素値が"d"の場合はそれ以外(default)に該当するため "other"と出力されます。

$arr = "a", "b", "c", "d"

switch($arr){
	"a" { Write-Host "a"}
	"b" { Write-Host "b"}
	"c" { Write-Host "c"}
	default { Write-Host "other"}
}

# 実行結果
a
b
c
other

参考サイト
配列について知りたかったことのすべて - PowerShell | Microsoft Docs

(まとめ記事: PowerShell 配列

PowerShell