【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メソッドの詳しい使い方については次の記事で詳しく解説しているので、ぜひ確認してみてください!

【C#入門】IndexOfで文字列やList、配列を検索する方法
更新日 : 2019年5月7日

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

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

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

【C#入門】Containsで値が含まれるか調べる方法(文字列/配列/List)
更新日 : 2019年4月4日

まとめ

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

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

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

中沢 丈

中沢 丈

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

連絡先はこちらです。
[email protected]