配列やListクラスには格納された要素を検索する為のメソッドが用意されています。
ListクラスにはFindメソッドなどがあります。
配列の場合は Arrayクラスを利用します。Arrayクラスのメソッドは static になっており各メソッドの第1引数に配列を渡すようになっていますが、それ以外使い方はListクラスと同じです。
検索メソッドの種類
検索のためのメソッドは以下のようにいくつか用意されています。
Listクラス
- Find(Predicate<T>) ・・・Listを先頭から検索して最初に一致する要素を返します
- FindAll(Predicate<T>) ・・・Listを検索して一致する要素すべてをListで返します
- FindIndex(Predicate<T>) ・・・Listを先頭から検索して最初に一致する要素のインデックス番号を返します
- FindLast(Predicate<T>) ・・・Listを最後から検索して最初に一致する要素を返します
- FindLastIndex(Predicate<T>) ・・・Listを最後から検索して最初に一致する要素のインデックス番号を返します
Arrayクラス
- Find(T[], Predicate<T>) ・・・配列を先頭から検索して最初に一致する要素を返します
- FindAll(T[], Predicate<T>) ・・・配列を検索して一致する要素すべてを配列で返します
- FindIndex(T[], Predicate<T>) ・・・配列を先頭から検索して最初に一致する要素のインデックス番号を返します
- FindLast(T[], Predicate<T>) ・・・配列を最後から検索して最初に一致する要素を返します
- FindLastIndex(T[], Predicate<T>) ・・・配列を最後から検索して最初に一致する要素のインデックス番号を返します
検索条件を定義するPredicate<T>デリゲート
検索条件は Predicate<T>デリゲートで定義します。
public delegate bool Predicate<T>(T obj);
引数には Listの要素が渡されてきます。
この要素が検索条件を満たすなら戻り値に true を、そうでないなら false を返します。
以下の例では、xとyが5以上の全てを抽出しています。
検索条件のデリゲートはラムダ式で実装しています。
public class TestItem { public int x; public int y; }
private void Test() { var list = new List<TestItem>(); list.Add(new TestItem() { x = 5, y = 4 }); list.Add(new TestItem() { x = 2, y = 1 }); list.Add(new TestItem() { x = 4, y = 7 }); list.Add(new TestItem() { x = 6, y = 3 }); list.Add(new TestItem() { x = 9, y = 9 }); list.Add(new TestItem() { x = 5, y = 6 }); var match = list.FindAll(item => { if (5 > item.x) return false; if (5 > item.y) return false; return true; }); foreach (var item in match) { System.Console.WriteLine("X=" + item.x + ",Y=" + item.y); } }
※デリゲートの詳細は「C#のデリゲート (delegate) って何?」をご覧ください
※ラムダ式の詳細は「C#のラムダ式【=>】って何?」をご覧ください
関連記事
- C#の値型と参照型の違い
- C#のコンストラクタでオーバーロード
- C#のコンストラクタの継承
- C#のジェネリックを使おう
- C#のデリゲート (delegate) って何?
- C#のデリゲートお手軽にする匿名メソッド
- C#のラムダ式【=>】って何?
- C#で基底クラスのメソッドを置き換えるオーバーライド
- C#でキャストとas演算子を使いこなす
- C#で型を判別するtypeofとis演算子
- C#の値型でもnullを扱えるようにするNullable
- C#のリソース解放にはIDisposableとusingを使おう
- C#のStringとstring、Int32とint 違いは・・・ない!
- C#でasync/awaitを使った非同期処理
- C#で文字列を指定の区切り文字で分割
- C#のstring.Formatで桁数や書式を指定する
- C#の配列やListをソートする
- C#の配列やListを検索する (Find,FindAll,FindIndex)
- C#の配列の中に指定の要素が存在するかを調べる(LINQ Contains)
- C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)
- C#の配列やListを高速に検索する (BinarySearch)
- C#の配列から条件に合う要素を抽出する(LINQ Where)
- C#の配列で要素毎の処理結果を得る(LINQ Select)
- C#の配列を並び替える(LINQ OrderBy,ThenBy)
- C#の配列をグループ毎に処理する(LINQ GroupBy)
- C#の配列を内部結合(INNER JOIN)する(LINQ Join)
- C#の配列から最初の要素を取り出す(LINQ First,FirstOrDefault)
- C#の配列の重複要素を削除する(LINQ Distinct)
- C#でフォルダ内のファイル名一覧を取得する
- C#でテキストファイルを読み込む
- C#でテキストファイルに書き込む
- C#でバイナリファイルを読み込む
- C#でバイナリファイルに書き込む
コメントをお書きください