Fun Coding

学んだことを記録していきます!

【C#】リストから条件に一致する要素を全て取得する方法 まとめ

リストから条件に一致する要素を全て取得するメソッドは2つあります。

方法
メソッド名
FindAll
Where
共通の仕様

・条件に一致する要素がある場合は条件に一致する要素のリストを返す
・条件に一致する要素がない場合は空のリストを返す

異なる仕様
方法
メソッド名
計算方法
FindAll 先行評価:即座に計算が行われる
Where 遅延評価:値が必要になった時に計算が行われる

遅延評価であるWhereを用いた方が計算回数やメモリが少なくなります。

コード
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample {
    /// <summary>
    /// メインプログラム
    /// </summary>
    public class Program {
        /// <summary>
        /// 方法の比較
        /// </summary>
        static void Main() {
            // リストを生成
            var list = new List<string>();

            // リストに値を追加
            list.Add("A");
            list.Add("AA");
            list.Add("AAA");
            list.Add("B");
            list.Add("BB");
            list.Add("BBB");

            // Aが含まれる長さが2以上の要素の検索
            // FindAllの場合
            List<string> findList1 = list.FindAll(n => n.Contains("A"));
            List<string> findList2 = findList1.FindAll(n => n.Length >= 2);
            Console.WriteLine("FindAll : " + findList2.Count);

            // Whereの場合
            IEnumerable<string> whereList1 = list.Where(n => n.Contains("A"));
            IEnumerable<string> whereList2 = whereList1.Where(n => n.Length >= 2);
            Console.WriteLine("Where : " + whereList2.Count());
        }
    }
}
出力
FindAll : 2
Where : 2