// Listの初期化
var list = new List<string> { "item1", "item2", "item1" };
// 最初に見つかった "item1" を1件削除
list.Remove("item1");
// "item1" を全て削除
list.RemoveAll(value => value == "item1");
// "item1" 以外を全て削除
list.RemoveAll(value => value != "item1");
// 文字数が10文字以下の値を全て削除
list.RemoveAll(value => value.Length <= 10);
// リスト0番目(先頭) の要素を削除
list.RemoveAt(0);
// 全ての要素 を削除
list.Clear();
Removeメソッド(最初に見つかった1件を消す)
Remove メソッドは引数に渡された値に一致する要素を削除します。戻り値は bool 型で、削除できた場合に true を返します。最初の1件しか削除されないので注意が必要です。
Removeメソッド の使い方
bool 結果(true:消せた or false:消せなかった) = list.Remove(消したい値);
Removeメソッド の使用例
次のサンプルコードは リストから 文字列 "item1" を削除しています。最初の1件しか削除されないので、結果は["item2", "item1"]です。
using System.Collections.Generic;
// リストの初期化
var list = new List<string> { "item1", "item2", "item1" };
// Removeメソッドで "item1" を削除
bool result = list.Remove("item1");
// Removeメソッドの戻り値 = true(true:削除できた)
System.Console.WriteLine($"result -> {result}");
// 削除結果を表示
foreach (var item in list)
{
// 結果 = "item2", "item1"
System.Console.WriteLine(item);
}
RemoveAllメソッド(条件に一致する値を全て消す)
RemoveAll メソッドは「デリゲート(英: delegate)」と呼ばれる仕組みで動作します。
引数に渡すのは関数で、この関数はリストの件数分呼ばれます。関数にリスト内の値が渡されるので、消したい値の場合は戻り値 true を返します。
RemoveAllメソッド の使い方
static bool デリゲート関数(listの型 value) {
return true(削除する) または false(削除しない);
}
int 削除件数 = list.RemoveAll(デリゲート関数);
無名関数(ラムダ式)
RemoveAll メソッドは無名関数と組み合わせて使用することが多いです。無名関数とは、その名の通り、関数名のない関数です。
// "item1" を全て削除
list.RemoveAll(value => value == "item1");
// "item1" 以外を全て削除
list.RemoveAll(value => value != "item1");
// 文字数が10文字以下の値を全て削除
list.RemoveAll(value => value.Length <= 10);
-
サンプルコード中 の value は無名関数の引数名です。分かりやすい名前に変更できます。
RemoveAllメソッド の使用例
次のサンプルコードは RemoveAllメソッド と 無名関数 を使用し、リスト中の "item1" を全て削除します。
using System.Collections.Generic;
// リストの初期化
var list = new List<string> { "item1", "item2", "item1" };
// RemoveAllメソッドで "item1" を全て削除
int result = list.RemoveAll(value => value == "item1");
// RemoveAllの戻り値 = 2(件)
System.Console.WriteLine($"result -> {result}");
// 削除結果を表示
foreach (var item in list)
{
// 結果 = "item2"
System.Console.WriteLine(item);
}
RemoveAtメソッド(指定インデックスの要素を1件削除)
RemoveAtメソッドは引数に渡したインデックスの要素を削除します。戻り値はありません。範囲外のインデックスを渡すと例外(ArgumentOutOfRangeException)が発生します。
RemoveAtメソッド の使い方
-
インデックスに渡せる値の範囲は 0 ~ list.Count -1 です。
-
範囲外の値を渡すと例外(ArgumentOutOfRangeException)が発生します。
RemoveAtメソッド の使用例
次のサンプルコードは forループとRemoveAtメソッド を使用し、リスト中の "item1" を全て削除します。リスト先頭から処理すると削除位置がずれるので、リストの最後から処理しています。
using System.Collections.Generic;
// リストの初期化
var list = new List<string> { "item1", "item2", "item1" };
// ループ + RemoveAt メソッドで "item1" を全て削除
for (int i = list.Count - 1; i >= 0; i--)
{
if (list[i] == "item1")
{
list.RemoveAt(i);
}
}
// 削除結果を表示
foreach (var item in list)
{
// 結果 = "item2"
System.Console.WriteLine(item);
}
Clearメソッド(すべての要素を削除)
Clearメソッドはリスト内全ての値を削除します。戻り値と引数はありません。
Clearメソッド の使い方
Clearメソッド の使用例
次のサンプルコードは Clearメソッド を使用し、リスト中の値を全て削除します。
using System.Collections.Generic;
// リストの初期化
var list = new List<string> { "item1", "item2", "item1" };
// ループ + Clear メソッドで "item1" を全て削除
for (int i = list.Count - 1; i >= 0; i--)
{
if (list[i] == "item1")
{
list.RemoveAt(i);
}
}
// 削除結果を表示
foreach (var item in list)
{
// 結果 = "item2"
System.Console.WriteLine(item);
}
参考資料
検証環境
-
.NET 5.0
-
Microsoft Visual Studio Professional 2019 Version 16.11.16
-
Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.2486 Experience: Windows Feature Experience Pack 120.2212.4190.0