読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

Linq入門記-45 (LINQ To Object, Contains)

今回は、Containsメソッドについてです。


Containsメソッドは、指定された要素がシーケンス内に存在するか否かを返します。
List.Containsなどと同じですね。


書式は以下の通り。

public static bool Contains<TSource>(
	this IEnumerable<TSource> source,
	TSource value
)

public static bool Contains<TSource>(
	this IEnumerable<TSource> source,
	TSource value,
	IEqualityComparer<TSource> comparer
)

2つ目の書式は、IEqualityComparerを指定できます。
カスタムオブジェクトのシーケンスに対して、よく利用します。


以下、サンプルです。

    #region LinqSamples-42
    public class LinqSamples42 : IExecutable
    {
        class Language
        {
            public string Name { get; set; }
                
            public static Language Create(string name)
            {
                return new Language { Name = name };
            }
        }
        
        class LanguageNameComparer : EqualityComparer<Language>
        {
            public override bool Equals(Language l1, Language l2)
            {
                return (l1.Name == l2.Name);
            }
            
            public override int GetHashCode(Language l)
            {
                return l.Name.GetHashCode();
            }
        }
        
        public void Execute()
        {
            //
            // Containsメソッドは、指定された要素がシーケンス内に存在するか否かを返す。
            //
            // IEqualityComparer<T>を指定するオーバーロードも存在する。
            //
            var names = new string[] { "csharp", "visualbasic", "java", "python", "ruby", "php" };
            Console.WriteLine("要素[python]は存在する? = {0}", names.Contains("python"));
            
            //
            // IEqualityComparer<T>を指定するバージョン.
            //
            var languages = new Language[] 
                            { 
                                Language.Create("csharp"), 
                                Language.Create("visualbasic"), 
                                Language.Create("java"),
                                Language.Create("python"),
                                Language.Create("ruby"),
                                Language.Create("php")
                            };
                            
            Console.WriteLine(
                    "要素[python]は存在する? = {0}", 
                    languages.Contains(Language.Create("python"), new LanguageNameComparer())
            );
        }
    }
    #endregion


実行結果は以下の通りです。

  要素[python]は存在する? = True
  要素[python]は存在する? = True

================================
過去の記事については、以下のページからご参照下さい。