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

スポンサーリンク

【List型】と自分は呼んでいるけど、正確には【Listクラス】らしい。。。
VisualStudioでコードを書いている時に、【青文字は[型]】【水色文字は[クラス]】なんでしょうね。
まぁ今回はそのことは置いといて、【リスト型の中にはラムダ式で書くとスッキリする】内容があるので紹介していきます。
リストの機能として準備されている関数がとっても便利なのです。
この記事では、少しでもリスト型(リストクラス)を使いこなす為のサンプルを紹介していきます。

ForEachメソッド

こんな事ありませんか!?
リストの中の数字を全部2倍にしたい」とか「リストの中の数字を全部二乗したい」とか「リストの中の文字の最後にカンマをつけたい」とか。。。
Pythonだと一行なのに、C#で書くと意外と手間ですよね。。。そこでラムダ式ですよ!
サンプルとして「リストの中の数字を全部2倍にしたい」を紹介したいと思います。

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

こんな感じですかね。

List<int> lstSample = new List<int> { 1, 2, 4, 8, 16 };
List<int> lstTemp = new List<int>();
foreach (int i in lstSample)
{
    lstTemp.Add(i * 2);
}

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

赤の太字青の太字を置き換えていきます。

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

こうなります。

List<int> lstSample = new List<int> { 1, 2, 4, 8, 16 };
List<int> lstTemp = new List<int>();
lstSample.ForEach(i => lstTemp.Add(i * 2));

lstTemp.ForEach(i => Console.WriteLine(i));  

こんな感じでスッキリします。

解説

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

引数には、Action<int>が必要だと。。。
もう少しかみ砕くと、引数には < 戻り値のない & 引数[ int型 ] の関数 >が必要だと書いています。
匿名メソッドで書いてもいいでしょうが、ラムダ式を用いる事で簡素化出来ます。

Action<T>については、下記記事を参考にしてください。
【C#】デリゲートを標準ライブラリで置き換える | 育児パパの人生備忘録 (t19488sns.com)

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

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

左辺(引数):int型の名前 i ※名前なので任意
右辺(式) :iをコンソールに出力(Console.WriteLine(i))

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

まとめ

Listクラス内に準備されている関数を使用する事で、わざわざforeach文を使わずに処理する事が出来ました。
Pythonではもう少し直感的に書くことが出来ますが、それに近い形で記述できています。
Listクラスを使いこなすことで、他にもたくさんの処理を簡潔に書くことが出来そうです。
実は自分も初めて知った事ですw
知らなくても実現するソースコードを書くことが出来るのは事実であり、知っている人はもっとソースコードを減らす事が出来ます。
少しずつですが、ラムダ式が分かってきたような気がします。

コメント

  1. 匿名 より:

    なぜ List.ForEach は使うべきでないか
    https://qiita.com/chocolamint/items/d29d699ce27bcf685154

    • 育児パパ より:

      記事拝見しました。
      たしかにそうですね。デメリットがある事も理解しないといけませんね。
      ありがとうございます。

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