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 配列)