いろいろ備忘録日記

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

Linq入門記-35 (LINQ To Object, Count, LongCount)


今回は、Count(LongCount)拡張メソッドについてです。


Count拡張メソッドは、文字通り件数を返します。


Count拡張メソッドの書式は以下の通りです。

public static int Count<TSource>(
	this IEnumerable<TSource> source
)

public static int Count<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)


一つ目の書式が一番よく利用される形のものですね。
2つめの書式は、一つ目の分にpredicateが追加されています。
このオーバーロードを利用すると、特定の条件に一致するデータの件数を取得する事が出来ます。
結構便利です。ちなみに、

xxxx.Where(....).Count()

としても同じ事になります。


同じ目的で利用出来るものとして、LongCount拡張メソッドというものもあります。
このメソッドは、文字通り結果をLongで返してくれます。
使い方は、Count拡張メソッドと全く同じです。


以下、サンプルです。

    #region LinqSamples-32
    public class LinqSamples32 : IExecutable
    {
        class Person
        {
            public string Name { get; set; }
            
            public override string ToString()
            {
                return string.Format("[NAME={0}]", Name);
            }
        }
        
        public void Execute()
        {
            var people = new Person[]
                         {
                             new Person{ Name = "gsf_zero1" },
                             new Person{ Name = "gsf_zero2" },
                             new Person{ Name = "gsf_zero3" },
                             new Person{ Name = "gsf_zero4" }
                         };
                         
            //
            // Count拡張メソッドは、シーケンスの要素数を取得するメソッドである。
            //
            // Count拡張メソッドには、predicateを指定できるオーバーロードが存在し
            // それを利用すると、特定の条件に一致するデータのみの件数を求める事が出来る。
            //
            // 尚、非常に多くの件数を返す可能性がある場合は、Countの代わりにLongCount拡張メソッドを
            // 使用する。使い方は、Count拡張メソッドと同じ。
            
            
            
            //
            // predicate無しで実行. 
            //
            Console.WriteLine("COUNT = {0}", people.Count());
            
            //
            // predicate有りで実行.
            //
            Console.WriteLine("COUNT = {0}", people.Count(person => int.Parse(person.Name.Last().ToString()) % 2 == 0));
            
            //
            // predicate無しで実行.(LongCount)
            //
            Console.WriteLine("COUNT = {0}", people.LongCount());
            
            //
            // predicate有りで実行.(LongCount)
            //
            Console.WriteLine("COUNT = {0}", people.LongCount(person => int.Parse(person.Name.Last().ToString()) % 2 == 0));
        }
    }
    #endregion


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

  COUNT = 4
  COUNT = 2
  COUNT = 4
  COUNT = 2

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