C#

【C#】Listの検索・追加・削除メソッドの使い方

Listの検索・追加・削除メソッドの使い方をまとめます。

【検証環境】.NET Framework 4.7.2

要素の検索

Find / FindLast

FInd メソッドはListから指定した条件を満たす最初の要素を返します。
FindLast メソッドはList全体を検索して、指定した条件と一致する最後の要素を返します。
どちらも条件に一致する要素がない場合、初期値を返します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//条件と一致する最初の要素を返す
int find1 = nums.Find(n => n > 5);  // 6 
int find2 = nums.Find(n => n > 10); // 0(初期値)
//条件と一致する最後の要素を返す
int findLast1 = nums.FindLast(n => n > 5);  // 9
int findLast2 = nums.FindLast(n => n > 10); // 0(初期値)

Find メソッドは FirstOrDefault メソッドと非常に似ています。
違いとしては、FirstOrDefaultはIEnumerable型の拡張メソッドで、FindはList型のメソッドです。
List型はIEnumerable型を実装しているのでFirstOrDefaultも使えますが、IEnumerable型だとFindは使えません。
速度的には若干Findのほうが早いらしいです。

FirstOrDefaultメソッドで統一して良いと思います。

FindAll

FindAll メソッドはListから指定した条件と一致するすべての要素を返します。
条件に一致する要素がない場合、空のListを返します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//条件と一致するすべての要素を返す
List<int> findAll1 = nums.FindAll(n => n > 5);  // Count = 4
List<int> findAll2 = nums.FindAll(n => n > 10); // Count = 0

FindIndex / FindLastIndex

FindIndex メソッドはListから指定した条件と一致する最初の要素のインデックスを返します。
FindLastIndex メソッドはListから指定した条件と一致する最後の要素のインデックスを返します。
どちらも条件に一致する要素がない場合、-1を返します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//条件と一致する最初の要素のインデックスを返す
int findIndex1 = nums.FindIndex(n => n > 5);    // 5
int findIndex2 = nums.FindIndex(n => n > 10);   // -1
//条件と一致する最後の要素のインデックスを返す
int findLastIndex1 = nums.FindLastIndex(n => n > 5);    // 8
int findLastIndex2 = nums.FindLastIndex(n => n > 10);   // -1

Exists

Exists メソッドはListから指定した条件と一致する要素が存在するかを判定します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//条件と一致する要素が存在するか
bool exists = nums.Exists(n => n > 5); // true

Exists メソッドは Any メソッドと非常に似ています。
違いとしては、AnyはIEnumerable型の拡張メソッドで、ExistsはList型のメソッドです。
List型はIEnumerable型を実装しているのでAnyも使えますが、IEnumerable型だとExistsは使えません。
速度的には若干Existsのほうが早いらしいです。

Anyメソッドで統一して良いと思います。

要素の追加

Add

Add メソッドはListの末尾に指定した要素を追加します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//末尾に11追加
nums.Add(11);

//IEnumerable型の場合
IEnumerable<int> enumerable = Enumerable.Range(1, 9);
enumerable = enumerable.Append(11);

Insert

Insert メソッドはListの指定した位置に要素を挿入します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//先頭に0追加
nums.Insert(0, 0);

要素の削除

Remove

Remove メソッドはListの指定した要素を削除します。
正常に削除が行われた場合trueを、それ以外の場合はfalseを返します。
要素が存在しない場合もfalseを返します。
また、複数の同一要素があった場合は最初に見つかった単一要素のみ削除されます。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//空のリスト生成
List<int> empty = Enumerable.Empty<int>().ToList();

//指定した要素の削除
bool remove1 = nums.Remove(1); // true
bool remove2 = empty.Remove(0); // false

RemoveAll

RemoveAll メソッドはListの指定した条件に一致するすべての要素を削除します。
削除した要素数を返します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//※削除した要素数を返す
var removeAll = nums.RemoveAll(n => n >= 5); // 5

Clear

Clear メソッドはListのすべての要素を削除します。

//1~9のリスト生成
List<int> nums = Enumerable.Range(1, 9).ToList();
//すべての要素の削除
nums.Clear(); // Count = 0

エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい