- 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 の要素はいる
|