転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

C#を勉強する⑤_List<T>クラスとラムダ式の組み合わせ

Listクラスには、デリゲートを引数に受け取るメソッドが用意されている。
paizaなどで問題を解く際、Listの操作をするシチュエーションは多々ある。ラムダ式を使うことでListの操作を簡潔にかけるので、ここでまとめておく。
なおこれから書くメソッドは、以下のListオブジェクトがある前提とする。

var list = new List<string> {
                "Tokyo", "New Delhi", "Bangkok", "london", "Paris", "Berlin", "Canberra", "Hong Kong",
            };

Existsメソッド
引数で指定した条件に一致する要素が存在するかどうかをtrue / falseで返す。

var exists = list.Exists(s => s[0] == 'A'); // 再祚の文字列がA
Console.WriteLine(exists); // falseと出力される

Findメソッド
引数で指定した条件と一致する要素を検索し、最初に見つかった要素を返す。

var name = list.Find(s => s.Length == 6); // 文字列が6の要素
Console.WriteLine(name); // londonが出力される

FindIndexメソッド
条件と一致するインデックスを返す。

int index = list.FindIndex(s => s == "Berlin"); // 要素の文字列がBerlin
Console.WriteLine(index); // 5が出力される

FindAllメソッド
FindAllメソッドは、引数で指定した条件と一致するすべての要素を取得する。Findメソッドとの大きな違いは、条件に一致するすべての要素を返却する点。

var names = list.FindAll(s => s.Length <= 5); // 文字列が5以下の要素
foreach(var s in names) {
    Console.WriteLine(s); // Tokyo Parisが出力される
}

RemoveAllメソッド
引数で指定した条件に一致する要素をリストから削除し、削除した要素数を返す。

var removedCount = list.RemoveAll(s => s.Contains("on")); // onが含まれる要素を削除
Console.WriteLine(removedCount); // 2が出力される
foreach(var s in list) {
    Console.WriteLine(s); // london Hong Kongが削除されたリストが出力
}

ForEachメソッド
リストの各要素に対して、引数で指定した処理を実行する。

list.ForEach(s => Console.WriteLine(s)); // listの全要素を出力する

ConvertAllメソッド
リスト内の要素を別の型に変換し、変換された要素が格納されたリストを返す。

var lowerlist = list.ConvertAll(s => s.ToLower()); // listの全要素をToLowerメソッドで小文字に変換