C#でのListとは?Where拡張メソッドを使った要素を検索する方法について紹介します!

- システム
エンジニア - C#でのListの要素を検索する方法を教えてください。
- プロジェクト
マネージャー - Where拡張メソッドを使ったListの要素検索方法について、ソースコードを交えて紹介しましょう。
[C#]Listの要素を検索する方法とは?
今回は、C#でのListの要素を検索する方法について説明します。
Contains/IndexOf/LastIndexOf/Find/FindAll/LINQのWhere拡張メソッドを使ったListの要素検索方法について、ソースコードを交えて紹介します。
興味のある方はぜひご覧ください。
Contains
C#では、Contains関数でListに要素が含まれているか検索できます。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Collections.Generic; public class Hello{ public static void Main(){ // 初期化 var mylist = new List<string>(){ “red”, “green”, “blue” }; // Listに含まれているか検索 System.Console.WriteLine(mylist.Contains(“red”)); // True System.Console.WriteLine(mylist.Contains(“yellow”)); // False // And検索 System.Console.WriteLine(mylist.Contains(“red”) && mylist.Contains(“blue”)); // True System.Console.WriteLine(mylist.Contains(“red”) && mylist.Contains(“yellow”)); // False // Or検索 System.Console.WriteLine(mylist.Contains(“red”) || mylist.Contains(“yellow”)); // True System.Console.WriteLine(mylist.Contains(“black”) || mylist.Contains(“white”)); // False } } |
実行結果は以下のようになります。
1 2 3 4 5 6 |
True False True False True False |
このようにC#では、Contains関数でListに要素が含まれているか検索できます。
IndexOf/LastIndexOf
C#では、IndexOf/LastIndexOf関数でListに要素が含まれているIndexを検索できます。見つからない場合は-1を返します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections.Generic; public class Hello{ public static void Main(){ // 初期化 var mylist = new List<string>(){ “red”, “green”, “blue”, “red”, “green”, “blue” }; // 最初に登場するIndexを検索 System.Console.WriteLine(mylist.IndexOf(“red”)); // 0 System.Console.WriteLine(mylist.IndexOf(“yellow”)); // -1 // 最後に登場するIndexを検索 System.Console.WriteLine(mylist.LastIndexOf(“red”)); // 3 System.Console.WriteLine(mylist.LastIndexOf(“yellow”)); // -1 } } |
実行結果は以下のようになります。
1 2 3 4 |
0 -1 3 -1 |
このようにC#では、IndexOf/LastIndexOf関数でListに要素が含まれているIndexを検索できます。
Find/FindAll
C#では、Find/FindAll関数でListに含まれている要素を検索できます。Find関数は最初に見つかった要素を返し、FindAll関数は見つかったすべての要素をコレクションで返します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System.Collections.Generic; public class Hello{ public static void Main(){ // 初期化 var mystrlist = new List<string>(){ “red”, “green”, “blue”, “red”, “green”, “blue” }; var myintlist = new List<int>(){ 1, 2, 3, 1, 2, 3 }; /* Find */ // blueを検索 System.Console.WriteLine(mystrlist.Find(s => s == “blue”)); // blue // gを含む要素を検索 System.Console.WriteLine(mystrlist.Find(s => s.Contains(“g”))); // green // 長さが3の要素を検索 System.Console.WriteLine(mystrlist.Find(s => s.Length == 3)); // red // 1を検索 System.Console.WriteLine(myintlist.Find(n => n == 1)); // 1 // 1より大きな要素を検索 System.Console.WriteLine(myintlist.Find(n => n > 1)); // 2 // 偶数を検索 System.Console.WriteLine(myintlist.Find(n => n % 2 == 0)); // 2 /* FindAll */ // blueを検索 System.Console.WriteLine(“{0}”, string.Join(“,”, mystrlist.FindAll(s => s == “blue”))); // gを含む要素を検索 System.Console.WriteLine(“{0}”, string.Join(“,”, mystrlist.FindAll(s => s.Contains(“g”)))); // 長さが3の要素を検索 System.Console.WriteLine(“{0}”, string.Join(“,”, mystrlist.FindAll(s => s.Length == 3))); // 1を検索 System.Console.WriteLine(“{0}”, string.Join(“,”, myintlist.FindAll(n => n == 1))); // 1より大きな要素を検索 System.Console.WriteLine(“{0}”, string.Join(“,”, myintlist.FindAll(n => n > 1))); // 偶数を検索 System.Console.WriteLine(“{0}”, string.Join(“,”, myintlist.FindAll(n => n % 2 == 0))); } } |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
blue green red 1 2 2 blue,blue green,green red,red 1,1 2,3,2,3 2,2 |
このようにC#では、Find/FindAll関数でListに含まれている要素を検索できます。
LINQのWhere拡張メソッド
C#では、LINQのWhere拡張メソッドを使って、Listの検索できます。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Collections.Generic; using System.Linq; public class Hello{ public static void Main(){ // 初期化 var myintlist = new List<int>(){ 0, 1, 2, 3, 4, 5 }; var mystrlist = new List<string>(){ “red”, “green”, “blue”, “red”, “green”, “blue” }; // 偶数を検索 var result1 = myintlist.Where(n => n % 2 == 0); // 見つかった要素数 System.Console.WriteLine(result1.Count()); // 3 // 見つかった要素 System.Console.WriteLine(“{0}”, string.Join(“,”, result1)); // 0,2,4 // 要素がredのIndexをすべて検索 var result2 = mystrlist.Select((value, index) => new {value, index}) .Where(item => string.Equals(item.value, “red”)) .Select(item => item.index); // 見つかった要素数 System.Console.WriteLine(result2.Count()); // 2 // 見つかったIndex System.Console.WriteLine(“{0}”, string.Join(“,”, result2)); // 0,3 } } |
実行結果は以下のようになります。
1 2 3 4 |
3 0,2,4 2 0,3 |
このようにC#では、LINQのWhere拡張メソッドを使って、Listの検索できます。
- システム
エンジニア - なるほど。Where拡張メソッドを使ったListの要素検索方法、よく分かりました。
- プロジェクト
マネージャー - ご紹介した方法を参考に、ご自身でもソースコードを書いて理解を深めてください。
まとめ
いかがでしたでしょうか。Contains/IndexOf/LastIndexOf/Find/FindAll/LINQのWhere拡張メソッドを使ったListの要素検索方法について、ソースコードを交えて紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)