C# - よく使うクラス - List - 要素を含んでいるか

 クラウディア
1. 概要
2. 単純なリスト
3. 要素指定

1. 概要

 ある「List」が、ある要素を含んでいるか。  これは、割と重要な命題です。  重複削除を後ですることもできますが、既に含んでいる要素は、新たにリストしたくないってことは、よくあることです。  本ページは、下記のサイトを参考にさせていただきました。
[C#] List要素の存在チェックを行う(.Exists)

2. 含んでいるか

 単純な、「string」の「List」だと、「Contains」メソッドを使用することで、「List」内に要素を含むか含まないかを確認することができます。

using System;
using System.IO;
using System.Collections.Generic;

public class TestConTains
{
	static public void Main ()
	{
		List<string> list = new List<string>
			{
				@"hogehoge"
			};

		if (list.Contains(@"hogehoge"))
		{
	        Console.WriteLine(@"hogehoge を 含んでいる");
		}
		else
		{
	        Console.WriteLine(@"hogehoge を 含んでいない");
		}

		if (list.Contains(@"fugafuga"))
		{
	        Console.WriteLine(@"fugafuga を 含んでいる");
		}
		else
		{
	        Console.WriteLine(@"fugafuga を 含んでいない");
		}
	}
}

 てなソースを書いて、ビルド、実行すると下記の結果が得られます。

hogehoge を 含んでいる
fugafuga を 含んでいない
 ただし、これ、単純な値のみの「List」だとうまくいくのですが、「List」内がクラスだったりすると、専用のメソッドを作らないと正しく判定できません。  つまり、スカラ変数や「string」ならね・・・と思っていたのですが。  参考サイトを読んで、書き方ひとつなのがわかりました。

3. 要素指定

 よう使う

List.Find(x => 式);
 の形式で、「Exists」ちゅうのが使えますだ。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

public class MyMain
{
	[Serializable]
	public class myClass
	{
		public int		i	= 0;												// 数値型要素
		public string	s	= String.Empty;										// 文字列型要素
	}

	static public void Main ()
	{
		List<myClass> list = new List<myClass>
			{
				new myClass { i = 2, s = "Y" },
				new myClass { i = 1, s = "Z" },
				new myClass { i = 3, s = "X" },
				new myClass { i = 5, s = "Y" },
				new myClass { i = 2, s = "X" },
				new myClass { i = 2, s = "Z" },
			};


		if (list.Exists(x => (x.i == 1) && string.Equals(x.s, "X")) == false)
		{
        	Console.WriteLine("i が 1 で s が X の要素はいない");
		}
		else
		{
        	Console.WriteLine("i が 1 で s が X の要素はいる");
		}


		if (list.Exists(x => (x.i == 2) && string.Equals(x.s, "Y")) == false)
		{
        	Console.WriteLine("i が 2 で s が Y の要素はいない");
		}
		else
		{
        	Console.WriteLine("i が 2 で s が Y の要素はいる");
		}

	}
}
 てなソースを書いて、ビルド、実行すると下記の結果が得られます。

i が 1 で s が X の要素はいない
i が 2 で s が Y の要素はいる
earthcar(アースカー)