C#には LINQ というライブラリがあります。
LINQ を使えばコレクション(配列や List クラスなど)に対する処理を簡単に行う事が出来ます。
ここでは、LINQ を使って配列に格納された要素の中に特定の要素が存在するかを調べる方法について解説します。
LINQとは
LINQ は IEnumerable<T>インターフェースへの拡張メソッドとして作られています。
つまり、配列、Listクラス、Dictionaryクラス、ObservableCollectionクラスなどのIEnumerable<T>インターフェースを実装するオブジェクトであればどれでも同じように使用する事ができます。
LINQをつかうには using で System.Linq を参照できるようにしておきましょう。
using System.Linq;
指定要素が存在するかを調べる Contains メソッド
指定要素があるかどうかを調べるには Contains メソッドを使用します。
メソッドの引数に指定した要素と一致する要素がある場合には true が、無い場合は false が返ります。
特定の要素が存在する場合にのみ処理する例
string[] testArray = new string[5];
testArray[0] = "Taro";
testArray[1] = "Jiro";
testArray[2] = "Saburo";
testArray[3] = "Shiro";
testArray[4] = "Goro";
if (testArray.Contains("Jiro"))
{
Console.WriteLine("Jiroさんがいます");
}
一致条件を独自のロジックにして存在の有無を調べる例
Contains メソッドは第2引数に IEqualityComparer インターフェースを渡す事が出来ます。IEqualityComparer インターフェースを実装したクラスを作成すれば一致条件を独自のロジックにする事も可能です。
public class TestEqualityComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return (x.ToLower() == y.ToLower());
}
public int GetHashCode(string obj)
{
return obj.ToLower().GetHashCode();
}
}
上記の例では大文字・小文字を区別せずに一致するかを確認するクラスを作ってみました。
string[] testArray = new string[5];
testArray[0] = "Taro";
testArray[1] = "Jiro";
testArray[2] = "Saburo";
testArray[3] = "Shiro";
testArray[4] = "Goro";
var ec = new TestEqualityComparer();
if (testArray.Contains("JiRo", ec))
{
Console.WriteLine("Jiroさんがいます");
}
似た機能をもつ Any メソッド
条件を指定して要素の有無を調べる場合には、Any メソッドを使う方法もあります。
Any メソッドではラムダ式で条件を記述できるので、IEqualityComparer インターフェースを使うより手軽です。
※詳細は「C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)」をご覧ください
関連記事
- C#のデリゲート (delegate) って何?
- C#のデリゲートを手軽にする匿名メソッド
- C#のラムダ式【=>】って何?
- C#の配列の中に指定の要素が存在するかを調べる(LINQ Contains)
- C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)
- 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)

コメント
コメントを投稿