VB.NETのコレクション検索方法を完全ガイド!データを探す基本テクニック
生徒
「先生、リストの中に特定の名前や数字が入っているか調べたいときは、どうすればいいですか?」
先生
「VB.NETには、たくさんのデータの中から目的のものを見つける『検索』という便利な機能が備わっていますよ。」
生徒
「一つずつ目で見て確認するのは大変そうですが、プログラムなら一瞬ですか?」
先生
「その通りです!数万個のデータからでも一瞬で探し出せます。まずは簡単な方法から見ていきましょう!」
1. コレクションの検索とは?
VB.NETのプログラミングにおける検索(けんさく)とは、配列やリストといったコレクション(データの集まり)の中に、特定の値が存在するかどうかを確認したり、その場所を特定したりする作業のことです。
例えば、お店の在庫リストの中から「リンゴ」があるか探したり、出席簿の中から「田中さん」が何番目にいるか調べたりするイメージです。パソコンは人間よりも圧倒的に速く、正確にこの作業を行うことができます。データ操作の基本となる検索を覚えることで、より実用的なアプリが作れるようになります。
2. 「入っているかな?」を確認する Contains メソッド
もっともシンプルで使いやすいのが Contains(コンテインズ)という命令です。英語で「~を含む」という意味がある通り、指定した値がリストの中に一つでも入っていれば「はい(True)」、なければ「いいえ(False)」と答えてくれます。
日常生活で例えるなら、カバンの中に「鍵」が入っているかどうか、手探りで確認するような感覚ですね。具体的な場所までは分かりませんが、有無だけを知りたいときに最適です。
Dim fruits As New List(Of String) From {"リンゴ", "バナナ", "オレンジ"}
' 「バナナ」が含まれているか調べます
If fruits.Contains("バナナ") Then
Console.WriteLine("バナナは見つかりました!")
Else
Console.WriteLine("バナナはありません。")
End If
バナナは見つかりました!
3. 「何番目にあるかな?」を調べる IndexOf メソッド
値があるかどうかだけでなく、「何番目の箱に入っているか」を知りたいときは IndexOf(インデックス・オブ)を使います。インデックスとは、データの住所のような番号のことです。
VB.NETのルールでは、番号は必ず0番から始まることに注意してください。もし、探しているものが見つからなかった場合は「-1」という特別な数字が返ってきます。これは「そんな場所はありません」という合図です。
Dim colors As New List(Of String) From {"赤", "青", "黄"}
' 「青」が何番目にあるか検索します
Dim position As Integer = colors.IndexOf("青")
If position <> -1 Then
Console.WriteLine("青は " & position & " 番目に見つかりました!")
Else
Console.WriteLine("見つかりませんでした。")
End If
青は 1 番目に見つかりました!
4. 条件に合う「最初の一つ」を探す Find メソッド
「全く同じ文字」を探すのではなく、「〇〇で始まる言葉」や「80点以上の数字」など、条件に合うものを探したいときは Find(ファインド)を使います。
これは少し高度な使い方に見えますが、「ラムダ式」という短いルールを渡すことで、パソコンに細かい指示を出せます。例えば、名簿の中から「苗字が『田』で始まる最初の人」を抜き出すといったことが可能です。
5. 数値のリストを条件検索する実演
次に、数値のリストから特定の条件を満たす値を探してみましょう。ここでは「50より大きい最初の数字」を探してみます。
Dim scores As New List(Of Integer) From {10, 45, 82, 30, 95}
' 50より大きい数字を一つ探します
' Function(s) s > 50 というのが「50より大きい」というルールです
Dim highScore As Integer = scores.Find(Function(s) s > 50)
Console.WriteLine("最初に見つかった50点超えは: " & highScore)
最初に見つかった50点超えは: 82
このように、リストの中に複数の正解があっても、Find は最初に出会ったものだけを教えてくれます。
6. 条件に合う「すべて」を探す FindAll
最初の一つだけでは満足できない、条件に合うものを全部抜き出したい!というときは FindAll(ファインド・オール)の出番です。
FindAll を使うと、結果は一つの値ではなく、条件に一致したものだけを詰め込んだ「新しいリスト」として返ってきます。フィルター(濾過器)を通すようなイメージですね。これで、特定の条件に合うグループを簡単に作ることができます。
7. LINQ(リンク)を使ったさらに強力な検索
VB.NETには LINQ(リンク) という非常に強力な検索ツールもあります。これを使うと、まるで「日本語で命令している」かのような感覚でデータを検索できます。
具体的には Where(どこに~があるか)という言葉を使い、複雑な条件をいくつも重ねて検索することができます。今は「そんなすごい魔法もあるんだな」と覚えておくだけで大丈夫です。
8. 検索がうまくいかないときのチェックポイント
初心者の方が検索機能を作るとき、よく「見つかるはずなのに見つからない!」という壁にぶつかります。主な原因は全角と半角の違いや、大文字と小文字の違いです。
人間から見れば「A」と「A」は同じですが、パソコンにとっては全くの別物です。検索をするときは、あらかじめ文字の種類を統一しておいたり、パソコンに「大文字と小文字は無視して探してね」と追加の指示を出したりするのがコツです。
9. 空っぽのリストを検索するとどうなる?
もし、データが一つも入っていない空っぽのリストを検索しようとするとどうなるでしょうか。基本的にはエラーにならず、単に「見つかりませんでした」という結果(Falseや-1など)が返ってきます。
ただし、検索結果が「何もない(Nothing)」状態のまま、そのデータを使おうとするとプログラムが止まってしまうことがあります。これを防ぐために、検索した後は必ず「ちゃんと見つかったかな?」と If 文で確認するのが、安全なプログラムを作るための大切なマナーです。
10. 検索機能をマスターして便利なアプリへ
データの検索は、あらゆるアプリケーションの心臓部です。電話帳、音楽プレーヤーの曲探し、ネットショッピングの絞り込み機能など、私たちが普段使っている機能のほとんどに「検索」が使われています。
今回学んだ Contains や IndexOf を使いこなせるようになれば、あなたのプログラムは一気に「賢いアプリ」へと進化します。まずは自分の好きな言葉を並べたリストを作って、いろいろな探し方を試してみてくださいね!