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
