【PowerShell】ハッシュテーブルにおけるContainsの罠~気を付けよう~

どうも!リョクちゃです。

今回は、Containsを使って見事に罠にはまったので紹介していきます。

ちなみに前回はこちら

PowerShellにおいてもPythonでいう辞書型やリスト型のコレクションは存在します。例を出しながら使い方を簡単にざっくりと紹介しています。PowerShellをもっと使えるようになりたい、よりプログラムチックなことをしていきたい、スクリプト組んでるときに使えるんじゃ?と思われた方々の参考になれば嬉しいです。



Containsとは

そもそもContainsとは、なにか?

String.Containsメソッドのことを指しており、

Windows環境では.NetFrameWorkが入っていれば標準で

サポートされているメソッドになります。

ちなみにVB.Netでは、以下で紹介していました。

VB.Netにおいて任意の文字列や値が配列やリスト変数に含まれているかどうかを判定するときに便利なContains関数の使い方を例を交えて紹介しています。上述のような関数を探していた方の参考になれば嬉しいです。

ある文字列の中から指定した文字列が含まれているかどうかを教えてくれるメソッドで、

例えば、以下の文字列に”おはよう”が含まれているかどうか調べたいとき

と書くことで、結果をTrue/Falseで返してくれます。

もちろん、含まれていれば True

含まれていなければ False

となります。

これがPowerShellでも使えて、PowerShellでは以下のようにして書くことができます。

はい、VB.Netのときと全く同じです。

以下、構文

<対象となる文字列>.Contains(<調べたい文字列>)

となります。

ファイルを探す際に使えるので頭の片隅に入れておきましょう。

辞書型にContainsを使う

辞書型については、こちらを参照ください。

PowerShellにおいてもPythonでいう辞書型やリスト型のコレクションは存在します。例を出しながら使い方を簡単にざっくりと紹介しています。PowerShellをもっと使えるようになりたい、よりプログラムチックなことをしていきたい、スクリプト組んでるときに使えるんじゃ?と思われた方々の参考になれば嬉しいです。

Containsは辞書型にも使うことができます。

例えば、以下のような辞書があります。

この辞書に”Blue”がキーとして含まれているかどうか判断したいので、

以下の記述でまずは辞書からキー情報のみを抽出します。

<辞書型変数>.keys
と記述することで、辞書型変数からキー情報のみを抽出することができます。
先ほど作った辞書変数のキーを抽出してみます。

これら取得できたキーの中からBlueが含まれているかどうかを、

Containsを使って判定してみます。

先ほどのkeysを活用したいので、以下の記述になります。

すると答えは、以下のようになります。

全てのキーに対して、結果を判定して返してくれます。

Containsの罠

これこそが罠で、こちらとしては”Blue”が含まれるではなく、

“Blue”がキーとして含まれているかどうかを判定したいので

これだと”Blue”があるのはわかるんだけど、どれが正しいBlueなの?

となってしまいます。

つまりは、Containsは完全一致での判定はできないということになります。

完全一致で検索したい場合はContainsの使い方に気を付ける必要がありますね。

今回のような、辞書型のキーに対して、このキーがあるかないかといった判定には、

ContainsKeyというメソッドを使います。

使い方は、

<辞書型変数>.ContainsKey(<調べたいワード>)

先ほど作った辞書型変数から”Blue”がキーとしてあるか調べます。

言わずもがなですが、結果はFalseになります。

まとめ

Containsに関しては、完全一致ではなく、あくまで指定したワードが

含まれているかどうかを判定してくれるメソッドになります。

使い分けに注意して、テストをする際はそれが本当に一致しているかどうかわからないことを

頭の片隅に入れながら奥深くまで確認をしていきましょう。

Containsの使い道はたくさんあるので、活用してみてください。

最後までお読みいただき、ありがとうございます。

スポンサーリンク