PowerShell: switch文で配列や連想配列を処理する
PowerShellのswitch文では、配列や連想配列(ハッシュテーブル) を処理できる便利な機能があります。 評価式の部分に配列や連想配列を指定することで、 コレクションの各要素をループして処理できます。
配列はそのまま指定すればいいのですが、 連想配列の場合はキーか値かを指定する必要があり、 KeysプロパティかValuesプロパティを使います。
もう一つの注意点として、 breakとcontinueの使い方があります。 break文を使うとswitchを抜け出してしまい、次の要素が実行されません。 抜け出さずに次の要素に移りたい場合はcontinueを使います。 配列や連想配列をswitch文で処理する場合は、 ループ文を書くときと同じようにbreakとcontinueを使ってください。
配列
配列はswitch文の評価式の部分にそそまま「$配列名」と記述することで、 配列の各要素を評価します。
次のコードは1から4までが格納された配列$arrをswitch文で指定しています。 ステートメントブロックの最後にbreakではなくcontinueを使って 次の要素に進んでいます。
$arr = 1 .. 4 switch ($arr) { 1 { Write-Host "1"; continue} 2 { Write-Host "2"; continue} 3 { Write-Host "3"; continue} Default {Write-Host "other"} } # 実行結果 1 2 3 other
もしcontinueではなくbreakと記述した場合は、 最初の要素「1」を評価して「1」と表示した後に switch文を抜け出します。 以降は何も処理されず、実行結果は次のようになります。
# 実行結果 1
連想配列(キー)
連想配列(ハッシュテーブル)のキー部分のコレクションは Keysプロパティで取得できるので、 switch文に「$連想配列名.Keys」と指定します。
次のコードは4つの要素(キーと値のペア)を持つ連想配列$hの Keysプロパティを指定し、キーの値によって処理を分岐しています。
$h = @{ a = 1 b = 2 c = 3 d = 4 } switch ($h.Keys) { a { Write-Host "a"; continue} b { Write-Host "b"; continue} c { Write-Host "c"; continue} Default {Write-Host "other"} } # 実行結果 other c a b
連想配列は順序が不定なので評価される順番はわかりません。
連想配列(値)
連想配列の値のコレクションはValuesプロパティで取得できるので 「$連想配列名.Values」と指定します。
次のコードは先程と同じ4つの要素を持つ連想配列$hの Valuesプロパティを指定しています。
$h = @{a = 1;b = 2;c = 3;d = 4} switch ($h.Values) { 1 { Write-Host "1"; continue} 2 { Write-Host "2"; continue} 3 { Write-Host "3"; continue} Default {Write-Host "other"} } # 実行結果 other 3 1 2