どうも!リョクちゃです。
今回は、Containsを使って見事に罠にはまったので紹介していきます。
ちなみに前回はこちら
目次
Containsとは
そもそもContainsとは、なにか?
String.Containsメソッドのことを指しており、
Windows環境では.NetFrameWorkが入っていれば標準で
サポートされているメソッドになります。
ちなみにVB.Netでは、以下で紹介していました。
ある文字列の中から指定した文字列が含まれているかどうかを教えてくれるメソッドで、
例えば、以下の文字列に”おはよう”が含まれているかどうか調べたいとき
1 |
"こんにちは、おはよう、こんばんは".Contains("おはよう") |
と書くことで、結果をTrue/Falseで返してくれます。
もちろん、含まれていれば True
含まれていなければ False
となります。
これがPowerShellでも使えて、PowerShellでは以下のようにして書くことができます。
1 2 |
"こんにちは、おはよう、こんばんは".Contains("おはよう") # 含まれているので、Trueを返す |
はい、VB.Netのときと全く同じです。
以下、構文
となります。
ファイルを探す際に使えるので頭の片隅に入れておきましょう。
辞書型にContainsを使う
辞書型については、こちらを参照ください。
Containsは辞書型にも使うことができます。
例えば、以下のような辞書があります。
1 2 3 4 5 |
$dictTest = @{} $dictTest.Add("Apple", 50) $dictTest.Add("BlueBacon", 60) $dictTest.Add("GreenApple", 80) $dictTest.Add("BlueApple", 80) |
この辞書に”Blue”がキーとして含まれているかどうか判断したいので、
以下の記述でまずは辞書からキー情報のみを抽出します。
1 2 3 4 5 |
$dictTest.keys # Apple # BlueBacon # GreenApple # BlueApple |
これら取得できたキーの中からBlueが含まれているかどうかを、
Containsを使って判定してみます。
先ほどのkeysを活用したいので、以下の記述になります。
1 |
$dictTest.keys.Contains("Blue") |
すると答えは、以下のようになります。
1 2 3 4 |
# True # False # True # False |
全てのキーに対して、結果を判定して返してくれます。
Containsの罠
これこそが罠で、こちらとしては”Blue”が含まれるではなく、
“Blue”がキーとして含まれているかどうかを判定したいので
これだと”Blue”があるのはわかるんだけど、どれが正しいBlueなの?
となってしまいます。
つまりは、Containsは完全一致での判定はできないということになります。
完全一致で検索したい場合はContainsの使い方に気を付ける必要がありますね。
今回のような、辞書型のキーに対して、このキーがあるかないかといった判定には、
ContainsKeyというメソッドを使います。
使い方は、
先ほど作った辞書型変数から”Blue”がキーとしてあるか調べます。
1 |
$dictTest.ContainsKey("Blue") |
言わずもがなですが、結果はFalseになります。
まとめ
Containsに関しては、完全一致ではなく、あくまで指定したワードが
含まれているかどうかを判定してくれるメソッドになります。
使い分けに注意して、テストをする際はそれが本当に一致しているかどうかわからないことを
頭の片隅に入れながら奥深くまで確認をしていきましょう。
Containsの使い道はたくさんあるので、活用してみてください。
最後までお読みいただき、ありがとうございます。