配列や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#のラムダ式【=>】って何?」をご覧ください

コメント
コメントを投稿