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が返ってきてもその値が何個あるのかまではわかりません。 詳細に調べたい場合はループする必要があります。

PowerShell