【C#】リスト型とラムダ式(ConvertAll)

スポンサーリンク

List型(Listクラス)を使いこなそう第2弾です。
今回紹介するのは「ConvertAllメソッド」です。

ConvertAllメソッド

前回「Foreachメソッド」を紹介した訳ですが、そのサンプルは自分の中で直感的じゃないと感じていました。
サンプルの内容として、「リストの中の数字を全部2倍にしたい」でした。
【C#】リスト型とラムダ式(ForEach) | 育児パパの人生備忘録 (t19488sns.com)

サンプルの言葉の意味的には、「リストの要素を全て2倍にしたい」わけで、別のリストに移し替えたいわけではありませんでした。
そこで、リストの要素をちゃんと2倍にしようと思います。

そこで「ConvertAllメソッド」を使用します。
リストの要素を指定された式に加工(変換)できる関数です。
変換後のリストは、戻り値して返ってきます

ConvertAllメソッドを知らない、ラムダ式を分からない人の場合

こんな感じですかね。

List<int> lstSample = new List<int> { 1, 2, 4, 8, 16 };

for(int i = 0;i < lstSample.Count;i++)
{
    lstSample[i] = i * 2;
}

foreach(int i in lstSample)
{
    Console.WriteLine(i);
}

そう!!こうしたかったんです!!

ConvertAllメソッドを使い、ラムダ式ができる人の場合

リストの中にあるすべての要素を変更します。

List<int> lstSample = new List<int> { 1, 2, 4, 8, 16 };

lstSample = lstSample.ConvertAll(i => i * 2);
lstSample.ForEach(i => Console.WriteLine(i));

ConvertAllメソッドを使って、lstSampleの全ての要素を変換する事が出来ました。

解説

(リスト型).ConvertAll()のConvertAll部分にマウスを持っていくと、説明がでてきます。

引数には、Converter<int,int>が必要だと書いています。
初登場[Converter]です。。。
これは[Action]や[Func]同様に[delegate]の中で標準ライブラリに準備されているクラスです。
もう少しかみ砕きましょう。
引数には、< 戻り値[ int型 ] & 引数[ int型 ]の関数>が必要だと書いています。

ラムダ式の書き方については、下記記事を参考にしてください。
【C#】ラムダ式の使い方(書き方) | 育児パパの人生備忘録 (t19488sns.com)

今回の場合は、ラムダ式で書く場合、《 左辺:引数 => 右辺:式 》という事から、こうなります。

左辺(引数):int型の名前 i ※名前なので任意
右辺(式) :iを2倍する(i * 2)

図で書くとこんな感じですかね。。。

まとめ

ConvertAllメソッドを使うと、変更した後の結果が出てくるので、より直感的になりました。
「リストの要素全てを○○したリストがほしい」と思ったときに、すべての要素を変換してくれて、その結果を返してくれるConvertAllメソッドはとても出番が多いような気がしました。
実際自分はリストの中身を力業でガンガン処理していくタイプでしたが。。。
今までの自分が少し恥ずかしく思いますね。

コメント

タイトルとURLをコピーしました