List<T>の中に一致する要素があるか判定するコードと実行結果
C#でListの中に値が一致する要素があるかを判定する方法を紹介します。
概要
リストの中に値が一致する要素があるかを調べる方法としてforループで配列の要素を一つずつ確認し、一致するものがあるかを調べる方法もありますが、LINQの標準クエリ演算子のContainsを使うことでよりシンプルに記述できます。
プログラム例
UI
下図のUIを作成します。
コード
下記コードを記述します。
private void button_Click(object sender, EventArgs e)
{
List<string> data = new List<string>();
data.Add("Penguin");
data.Add("Niwatori");
data.Add("Kujira");
data.Add("Karugamo");
if (data.Contains(textBox_Input.Text) == true) {
textBox_Output.Text += "一致している要素がありました。\r\n";
}
else {
textBox_Output.Text += "一致している要素はありませんでした。\r\n";
}
}
解説
List<string> data = new List<string>();
data.Add("Penguin");
data.Add("Niwatori");
data.Add("Kujira");
data.Add("Karugamo");
にて List<string>のリストを作成し要素を追加します。
if (data.Contains(textBox_Input.Text) == true) {
textBox_Output.Text += "一致している要素がありました。\r\n";
}
else {
textBox_Output.Text += "一致している要素はありませんでした。\r\n";
}
Containsメソッドを呼び出し、テキストボックスに入力した内容と同じ内容の要素があるかを判定します。同じ内容の要素が見つかった場合はTrueを要素が見つからなかった場合はFalseを返します。戻り値の値に応じてたテキストをテキストボックスに表示します。
実行結果
プロジェクトを実行すると下図のウィンドウが表示されます。
入力内容に一致するものがあった場合は、「一致している要素がありました。」をテキストボックスに表示します。
参考
LINQクエリ式を記述する場合のコード例です。動作結果はContainsメソッドを利用した場合と同様になります。
Containsメソッドを利用した場合はtrue, falseで一致する要素があるかの判定ができますが、LINQクエリ式を用いた場合は一致した個数での判定となります。このため、Containsメソッドと全く同じ動作にはなりません。Containsメソッドと全く同じ動作をするLINQクエリ式は無いです。
private void button_Click(object sender, EventArgs e)
{
List<string> data = new List<string>();
data.Add("Penguin");
data.Add("Niwatori");
data.Add("Kujira");
data.Add("Karugamo");
IEnumerable<string> ret = from x in data where x == textBox_Input.Text select x;
foreach (string ea in ret) {
textBox_Output.Text += ea + "\r\n";
}
if (ret.Count() > 0) {
textBox_Output.Text += "一致している要素がありました。\r\n";
}
else {
textBox_Output.Text += "一致している要素はありませんでした。\r\n";
}
}
実行結果
参考
SQL文の形式でLINQ を記述した際に Contains を記述できますが、この場合の Contains は今回の記事で紹介したEnumerable.Containsメソッドとは動作が異なります。LINQ 文でのContains については
こちらの記事を参照して下さい。
このページのキーワード
- C# List<T> 一致する要素を判定
- List<T> 要素 一致 判定
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用