C# で条件を指定して、リストや配列内のオブジェクトの数(要素数)をカウントする方法
条件を指定して、リストや配列内のオブジェクトの数(要素数)をカウントする
クラスのオブジェクトが複数入っているリスト (List) があって、クラスの変数が特定の値を持つオブジェクト数を数えたいような時ありませんか?
例えば、次のような Student クラスのリスト List<Student> があって、Birthday が null の要素数や、TestPassed が true の要素数を数えたいような時です。
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? Birthday { get; set; }
public bool TestPassed { get; set; }
public Student(string firstName, string lastName, DateTime? birthday, bool testPassed)
{
FirstName = firstName;
LastName = lastName;
Birthday = birthday;
TestPassed = testPassed;
}
}
C# で条件を指定して、リストや配列内のオブジェクトの数(要素数)をカウントしたい時には、System.Linq の Count メソッドが使えます。
使い方は リスト.Count(obj => [obj を使った条件式]) のような感じで指定できます。
obj としている箇所は他の名前でも大丈夫で、obj のデータ型はリストに入っているオブジェクトのデータ型になります。
Linq の Count メソッドを使って、条件を指定して要素数を数えるサンプルコードは次の通りです。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var students = new List<Student&>();
students.Add(new Student("Kana", "Yamada", null, true));
students.Add(new Student("Keita", "Maeda", Convert.ToDateTime("2010/05/15"), true));
students.Add(new Student("Kaede", "Tanaka", Convert.ToDateTime("2009/02/01"), true));
students.Add(new Student("Ryota", "Suzuki", Convert.ToDateTime("2010/11/24"), true));
students.Add(new Student("Saki", "Taguchi", null, false));
Console.WriteLine(students.Count(s => s.Birthday == null));
Console.WriteLine(students.Count(s => s.TestPassed == true));
Console.WriteLine(students.Count(s => s.FirstName.StartsWith("K")));
Console.WriteLine(students.Count(s => s.LastName == "ABC"));
}
}
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? Birthday { get; set; }
public bool TestPassed { get; set; }
public Student(string firstName, string lastName, DateTime? birthday, bool testPassed)
{
FirstName = firstName;
LastName = lastName;
Birthday = birthday;
TestPassed = testPassed;
}
}
}
11 ~ 16 行目は Student クラスのオブジェクトを持つ List を生成しています。
18 行目は、students リストの中で、Birthday が null の要素数をカウントしています。
19 行目は、students リストの中で、TestPassed が true の要素数をカウントしています。
20 行目は、students リストの中で、FirstName が K で始まる要素数をカウントしています。
21 行目は、students リストの中で、LastName が ABC の要素数をカウントしています。 条件を満たす要素がない場合も 0 が返るだけでエラーにはなりません。
実行すると次のようになります。
2
4
3
0
以上、C# で条件を指定して、リストや配列内のオブジェクトの数(要素数)をカウントする方法をご紹介しました。