PowerShell: 連想配列にキーや値が存在するかどうかを確認する
PowerShellで連想配列(ハッシュテーブル)に
キーや値が存在するかどうかを確認する場合、
ContainsKeyやContainsValueメソッドを使います。
キーの場合はContainsKey、
値の場合はContainsValueです。
キーの存在を確認する ContainsKey
書式
連想配列.ContainsKey(キー)
指定したキーが存在する場合はTrue,
存在しない場合はFlaseを返します。
ContainsメソッドもContainsKeyメソッドと同じ機能なので、
どちらで記述しても構いません。
次のコードでは、ContainsKeyメソッドを使って キーの存在を確認しています。
$h = @{ a = 100 b = 200 } $h.ContainsKey("a") # True $h.ContainsKey("c") # False
PowerShellの連想配列で要素を追加する時にAddメソッドを使う場合、 すでに存在するキーを指定するとエラーになります。 そこでContainsKeyメソッドを使ってチェックをするのも1つの方法です。
次のサンプルコードでは、Addメソッドのエラーを回避するために、 事前にContainsKeyメソッドを使ってキーの存在をチェックし、 存在しなければ要素を追加しています。 if文の条件式には論理否定演算子「!」を使っています。
$h = @{ a = 100 b = 200 } # キーが存在しなければ追加 if (! $h.ContainsKey("c")){ $h.Add("c", 300) }
値の存在を確認する ContainsValue
書式
連想配列.ContainsValue(値)
ContainsValueメソッドは、 指定した値が存在する場合はTrue、 存在しない場合はFalseを返します。
次のコードではContainsValueメソッドで 値が存在するかどうかを確認しています。
$h = @{ a = 100 b = 200 } $h.ContainsValue(100) # True $h.ContainsValue(300) # False
ContainsValueメソッドでわかるのは、 あくまでTrue/Flaseのどちらかです。 例えば連想配列内に同じ値があったとして、 Trueが返ってきてもその値が何個あるのかまではわかりません。 詳細に調べたい場合はループする必要があります。