C#でプログラミングをしていると、配列から特定の値や条件に合った要素を探したい場面がよくあります。たとえば、ユーザーが入力した文字列が既存のリストに含まれているかどうかを確認したり、特定の条件に一致するデータだけを抽出したい場合などです。
本記事では、C#における配列の検索方法について、基本から応用まで具体的なコード例とともにわかりやすく解説していきます。初心者の方でも理解できるように、1つひとつ丁寧に説明していますので、ぜひ最後までご覧ください。
配列とは?C#での基本構文を確認
C#の配列は、同じデータ型の値を複数格納できるデータ構造です。配列は宣言と初期化によって使用することができます。
// 配列の宣言と初期化
int[] numbers = new int[] { 10, 20, 30, 40, 50 };
string[] fruits = { "Apple", "Banana", "Orange" };
配列のインデックスは0から始まり、特定の要素へアクセスするには 配列名[インデックス]
を使います。
方法①:forループを使った基本的な検索
最も基本的な方法は for
ループを使って、1つひとつの要素を順に確認する方法です。
int[] numbers = { 5, 10, 15, 20, 25 };
int target = 15;
bool found = false;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == target)
{
found = true;
Console.WriteLine($"見つかりました!インデックス: {i}");
break;
}
}
if (!found)
{
Console.WriteLine("見つかりませんでした。");
}
この方法はシンプルで直感的ですが、大規模な配列になると処理効率が落ちることがあります。
方法②:Array.IndexOf() を使う
C#標準の Array
クラスには、要素の位置を検索する便利なメソッド IndexOf
が用意されています。
string[] colors = { "Red", "Green", "Blue", "Yellow" };
int index = Array.IndexOf(colors, "Blue");
if (index >= 0)
{
Console.WriteLine($"'Blue' はインデックス {index} にあります。");
}
else
{
Console.WriteLine("見つかりませんでした。");
}
この方法はコードがスッキリするので、簡単な検索にはとても便利です。
方法③:foreachループを使う
foreach
ループを使えば、より読みやすいコードで検索処理が可能です。ただし、インデックスが必要な場合には向いていません。
string[] fruits = { "Apple", "Banana", "Grapes" };
string search = "Banana";
bool exists = false;
foreach (var fruit in fruits)
{
if (fruit == search)
{
exists = true;
Console.WriteLine("見つかりました!");
break;
}
}
if (!exists)
{
Console.WriteLine("見つかりませんでした。");
}
方法④:List<T>とContains()を使う
配列をListに変換することで、さらに便利なメソッド Contains()
を使うことができます。
int[] numbers = { 1, 2, 3, 4, 5 };
List<int> numberList = new List<int>(numbers);
if (numberList.Contains(3))
{
Console.WriteLine("3 が見つかりました!");
}
else
{
Console.WriteLine("見つかりませんでした。");
}
List<T>
には他にも Find
や FindAll
など多彩な検索機能があり、条件付き検索に強いのが特徴です。
方法⑤:Array.Find()やArray.FindAll()で条件検索
より複雑な条件で要素を検索したい場合、Array.Find()
やArray.FindAll()
が使えます。
int[] numbers = { 10, 15, 20, 25, 30 };
// 最初に20以上の数値を探す
int result = Array.Find(numbers, n => n >= 20);
Console.WriteLine($"最初に20以上の数値: {result}");
// すべての20以上の数値を探す
int[] results = Array.FindAll(numbers, n => n >= 20);
Console.WriteLine("20以上の数値:");
foreach (var num in results)
{
Console.WriteLine(num);
}
ラムダ式を組み合わせることで、自由な条件で検索できます。
方法⑥:LINQを使った高度な検索
LINQ(言語統合クエリ)を使えば、配列の検索がさらにパワフルになります。読みやすく、柔軟な検索が可能です。
using System.Linq;
string[] names = { "Taro", "Jiro", "Saburo", "Shiro" };
// "ro" が名前に含まれるものを検索
var result = names.Where(name => name.Contains("ro")).ToArray();
Console.WriteLine("結果:");
foreach (var name in result)
{
Console.WriteLine(name);
}
LINQを使えば、絞り込み・並び替え・集計なども簡単に実装できるため、今後学んでおくと便利です。
方法⑦:二次元配列や多次元配列の検索
二次元配列など複雑な配列の検索も、基本は同じくループで確認していきます。
int[,] matrix = {
{1, 2},
{3, 4},
{5, 6}
};
int target = 4;
bool found = false;
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
if (matrix[i, j] == target)
{
Console.WriteLine($"見つかりました:[{i},{j}]");
found = true;
break;
}
}
if (found) break;
}
配列検索で注意すべきポイント
- nullチェック:配列がnullの可能性がある場合、先にチェックしておきましょう。
- 大文字小文字の区別:文字列比較では
ToLower()
などを使って正確に判断することが大切です。 - 大量データ時のパフォーマンス:配列が大きくなると検索コストも増えるため、ListやDictionaryの方が適することもあります。
まとめ
C#で配列を検索する方法は実に多彩で、用途やデータ量に応じて適切な方法を選ぶことが大切です。
基本的な for
ループから始まり、Array
メソッド、List<T>
, LINQ
まで、実用性の高いテクニックをご紹介しました。
実際の開発では、読みやすさ・実行速度・条件の複雑さなどを考慮して、最適な検索方法を選びましょう。