Count 拡張メソッドで要素数を数える
(2017/03/07 20:35:57 created.)
Count 拡張メソッドではある特定の条件を満たす要素数を数えます。次のような人物データを表す Person クラスを定義します。
Person.cs
namespace Tips_Linq
{
using System;
/// <summary>
/// 人物データを表します。
/// </summary>
public class Person
{
/// <summary>
/// 氏名を取得または設定します。
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年齢を取得または設定します。
/// </summary>
public int Age { get; set; }
}
}
この Person クラスを使った Count 拡張メソッドのコード例と実行結果を次に示します。
Program.cs
namespace Tips_Linq
{
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var people = GetPeople();
foreach (var p in people)
{
Console.WriteLine(p.Name + " (" + p.Age + ")");
}
var count = people.Count();
var value = 30;
var elderThan = people.Count(x => x.Age > value);
Console.WriteLine("{0} 人中 {1} 人が {2} 歳より年上です。", count, elderThan, value);
Console.ReadKey();
}
/// <summary>
/// 人物コレクションの列挙子を取得します。
/// </summary>
/// <returns></returns>
static IEnumerable<Person> GetPeople()
{
yield return new Person() { Name = "田中 淳平", Age = 37 };
yield return new Person() { Name = "鈴木 ほのか", Age = 26 };
yield return new Person() { Name = "小池 哲司", Age = 22 };
yield return new Person() { Name = "恩田 進", Age = 42 };
yield return new Person() { Name = "中津山 亜希子", Age = 20 };
}
}
}
Count 拡張メソッドに入力引数を何も与えない場合、シーケンス全体の要素数を数えます。入力引数に Func
Count 拡張メソッドで要素数を数えることで、そのシーケンスが空かどうかを判定することもできますが、特に要素数が多くなる可能性のあるシーケンスの場合は Any 拡張メソッドを使うことをお勧めします。Count 拡張メソッドを使用した場合、空シーケンスでない場合は全要素を数えるために要素数分だけループが発生するため、処理速度が落ちます。
Tweet