【C#入門】Listの要素を検索するFindの使い方(FindAll/FindIndex)

こんにちは!エンジニアの中沢です。

C#にはListの要素を検索して、条件に一致する要素を取得するための「Findメソッド」があります。

「Findメソッド」の他にも、目的に合わせて「FindAllメソッド」や「FindIndexメソッド」を使うことがあります。

この記事では、

  • Findとは
  • Findで要素を検索して取得する方法

という基本的な内容から、

  • FindLastで後ろから要素を検索して取得する方法
  • FindIndexで要素を検索してインデックスを取得する方法
  • 自作クラスの値を取得する方法

などの応用的な使い方に関しても解説していきます。

今回はこれらの方法を覚えるために、Listの要素を検索するさまざまな使い方をわかりやすく解説します!

目次

Findとは

FindメソッドはListから指定した条件に合った要素を取り出すときに使います。条件とは、「値が偶数か奇数か?」、「文字列の長さが”5”か?」、「自作クラスの”ID”が”3”のデータは?」などです。

Findメソッドは要素を先頭から検索して、初めに見つかった一つの要素を返します

要素を後ろから検索する場合には、FindLastメソッドを使います。条件に一致するすべての要素を取得するには、FindAllメソッドを使います。

Findで要素を検索して取得する方法

ここでは、Findメソッドで要素を検索して取得する方法を解説します。Findメソッドで条件を指定するときは、ラムダ式を使うことが多いです。

次のプログラムのラムダ式の「list.Find(n => n % 2 == 0)」の部分は、Listの要素を”n”として、2で割った余りが”0”の要素を返しています。

Findメソッドの使い方を次のプログラムで確認してみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int> { 1, 2, 3, 7, 8, 9 };

            int result = list.Find(n => n % 2 == 0);

            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

実行結果

2

このプログラムでは、Findメソッドを使ってListの中から偶数の値を検索して、最初に見つかった「2」を表示しています。

Findメソッドは先頭から検索して初めに見つかった要素を返すので、条件に合った2つ目の要素の「8」は返されないことに注意が必要です。

このようにしてFindメソッドから条件を指定して要素を取得することができました。

FindAllですべての要素を検索して取得する方法

ここでは、FindAllメソッドで条件に一致するすべての要素を取得する方法を解説します。FindAllメソッドは、条件に一致したすべての要素をListにして返します。

FindAllメソッドの使い方を次のプログラムで確認してみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int> { 1, 2, 3, 7, 8, 9 };

            List<int> result = list.FindAll(n => n % 2 == 0);

            Console.WriteLine(String.Join(",", result));
            Console.ReadKey();
        }
    }
}

実行結果

2,8

このプログラムでは、FindAllメソッドを使ってListの中から偶数の値を検索して、偶数の「2」と「8」を表示しています。

このようにしてFindAllメソッドで条件に一致するすべての要素を取得することができました。

FindLastで後ろから要素を検索して取得する方法

ここでは、FindLastメソッドで後ろから要素を検索して取得する方法を解説します。FindLastメソッドは、Findメソッドと同様に使うことができます。

Findメソッドとの違いは要素を後ろから検索することです。FindLastメソッドの使い方を次のプログラムで確認してみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int> { 1, 2, 3, 7, 8, 9 };

            int result = list.FindLast(n => n % 2 == 0);

            Console.WriteLine(String.Join(",", result));
            Console.ReadKey();
        }
    }
}

実行結果

8

このプログラムでは、FindLastメソッドを使ってListの後ろから偶数の値を検索して、偶数の「8」を表示しています。

FindLastメソッドは後ろから検索して初めに見つかった要素を返すので、条件に合った2つ目の要素の「2」は返されないことに注意が必要です。

このようにしてFindLastメソッドで条件に一致する要素を後ろから取得することができました。

条件に合う要素のインデックスを取得する方法

FindIndexで要素を検索してインデックスを取得する方法

ここでは、FindIndexメソッドで条件に合う要素のインデックスを取得する方法を解説します。

FindIndexメソッドは、Findメソッドと同様に使うことができ、違いは戻り値が要素ではなくインデックスであることです。FindIndexメソッドの使い方を次のプログラムで確認してみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int> { 1, 2, 3, 7, 8, 9 };

            int result = list.FindIndex(n => n % 2 == 0);

            Console.WriteLine(String.Join(",", result));
            Console.ReadKey();
        }
    }
}

実行結果

1

このプログラムでは、偶数の値の「2」のインデックスの「1」を表示しています。このようにしてFindIndexメソッドで条件に一致する要素のインデックスを取得することができました。

FindLastIndexで後ろから要素を検索する方法

ここでは、FindLastIndexメソッドで条件に合う要素のインデックスを後ろから取得する方法を解説します。

FindLastIndexメソッドの使い方を次のプログラムで確認してみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int> { 1, 2, 3, 7, 8, 9 };

            int result = list.FindLastIndex(n => n % 2 == 0);

            Console.WriteLine(String.Join(",", result));
            Console.ReadKey();
        }
    }
}

実行結果

4

このプログラムでは、偶数の要素を後ろから検索して「8」のインデックスの「4」を表示しています。

このようにしてFindLastIndexメソッドで条件に一致する要素のインデックスを後ろから取得することができました。

自作クラスの値をFindで取得する方法

ここでは、自作クラスの値をFindメソッドで取得する方法を解説します。

次のプログラムでは、名前と年齢の2つのデータを記録した自作クラスのリストから、名前を検索して年齢取得しています。

次のプログラムで自作クラスの値をFindメソッドで取得する方法を確認してみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Member>();

            // データ入力1
            Member mem1 = new Member();
            mem1.Name = "Yamada";
            mem1.Age = 20;
            list.Add(mem1);

            // データ入力2
            Member mem2 = new Member();
            mem2.Name = "Tanaka";
            mem2.Age = 25;
            list.Add(mem2);

            // 要素を検索
            int result = list.Find(m => m.Name == "Tanaka").Age;

            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

    public class Member
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

実行結果

25

このプログラムでは、「list.Find(m => m.Name == “Tanaka”).Age」の部分で”Name”が”Tanaka”の要素の”Age”の値を取得して表示しています。

IndexOfメソッドで検索してインデックスを取得する方法

配列やListに特定の文字列などが含まれているかを知りたい場合には、IndexOfメソッドを使って要素のインデックスを取得することができます。

IndexOfメソッドの詳しい使い方については次の記事で詳しく解説しているので、ぜひ確認してみてください!

Containsで値が含まれているか判定する方法

配列やListに特定の文字列などが含まれているかを知りたい場合には、Containsメソッドを使って判定することができます

Containsメソッドの詳しい使い方については次の記事で詳しく解説しているので、ぜひ確認してみてください!

まとめ

いかがでしたか?今回はFindメソッドで条件を指定してListの要素を検索する方法を解説しました。

すべての要素を取得したい場合にはFindAllメソッドを使うなど、状況に応じて使い分けてくださいね。

もし、Findメソッドで検索する方法を忘れてしまったらこの記事を確認してください!

この記事を書いた人

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
ntakeshi@sejuku.net

目次