(C#) LINQとラムダ式の使い方

(C#) LINQとラムダ式の使い方

 

本記事では、
C#のLINQとラムダ式の使い方について解説していく。

 

【初めに】LINQとラムダ式をセットで学ぶ理由

タイトルではLINQとラムダ式をセットで学ぶ感じにしてあるが、これには訳がある。
初めにこの理由について触れておきたい。

なぜLINQとラムダ式をセットで解説するのかというと、、
LINQはラムダ式を使用するため、セットで覚えるとLINQはラムダ式を理解する学習効率が良いためだ。

C#のLINQとラムダ式を理解する

上記を念頭に記事を読み進めていただくと幸い。

 

LINQとラムダ式をセットで学ぶ理由
  • LINQはラムダ式を使用するため、セットで覚えるとLINQはラムダ式を理解する学習効率が良い。

 

では早速、詳しい解説に移っていく。

 

ラムダ式とは




まず先に理解する必要があるのはラムダ式の使い方だ。

ラムダ式とは、簡単に言うと、
戻り値を返すメソッドを、簡単に書く方法のことだ。

ラムダ式の書式は下記。

#ラムダ式の書式

(引数) => 戻り値の計算式

 

ラムダ式の書式だけでは具体性が湧かないと思うので、以下に簡単なラムダ式を使用したサンプルを紹介する。左が通常の書式、右がラムダ式を使用したサンプルだ。

ラムダ式の解説画像

 

ラムダ式を使う際の最大の特徴は、アロー演算子(=>)を使用するのが特徴で、みてわかる通り、同じ意味を持つ式を書く際に、通常の書式よりもラムダ式を使った方がスッキリとメソッドを記載できているのが分かる。

 

ラムダ式の特徴
  • アロー演算子(=>)を使用する
  • 通常の書式よりもラムダ式を使った方がスッキリとメソッドを記載できている

 

 

ラムダ式の実使用例

書式だけ見せられて簡単と書かれても良くわからないと思うので、次に、
普通のメソッドと、ラムダ式のメソッドを比較して理解する。

まずは通常のメソッドを用意。
引数に3を足した数をreturnするメソッドを例に説明していく。

#通常のメソッド
int Add(int n)
{
    return n+3;
}

 

上記をラムダ式で書くと下記のようになる

#ラムダ式
n => n+3

 

=>より左(n)が引数で、右(n+3)が戻り値となる。
通常のメソッドと比較して、ラムダ式の方が非常に完結に記述できるのが分かる。

 

引数が二つになった場合は下記のようになる

#通常
int Add(int a, int b)
{
    return a+b;
}

#ラムダ式
(a, b) => a+b

 

計算だけでなく、真偽値を返したりもできる。

#通常
bool IsMoreThanZero(int n)
{
return n >= 0;
}

#ラムダ式
n => n>=0;

 

上記のように、
ラムダ式を使うと、条件と戻り値を完結に記述できる特徴がある。

 

LINQとは

LINQとは、簡単に言うと、
配列やコレクションに格納されたデータを、簡単に扱うことができる仕組みのことだ。

具体的には、
配列やコレクションから、条件にあった値だけ取り出したり、取得したデータになんらかの処理をしたりといったことが可能である。

そして、
この条件を指定する時に、ラムダ式を使用する。

LINQがラムダ式を使用する画像

 

LINQの書式は下記

# LINQの書式

配列orコレクション.LINQメソッド(ラムダ式);

 

見て分かる通り、
LINQメソッドを使用する際に、引数をラムダ式で記述する必要があると言うのがみて取れる。

 

LINQを使った例

では実際に、LINQを使った例を紹介していく。

static void Main(string[] args)
{
    int[] nums = { 10, 50, 80, 100, 120 };

    // LINQを使って、numsから、100以上の数字を取り出す
    var linqNum = nums.Where(n => n>=100);                  # LINQを使用(引数がラムダ式)

    // 取り出した数字を表示する
    foreach (int n in linqNum)
    {
        Console.WriteLine(n);
    }
}
#結果
100
120

 

上記のサンプルでは、
LINQのWhereメソッドを使って、配列numsから、100以上の数字を絞り込んでいるのが分かる。
そして、Whereメソッド内はラムダ式で記述されている。

上記のように、
LINQとラムダ式をセットで使用することで、配列やコレクションを簡単に、かつ理解しやすく操作できると言うのがお分かりいただけたと思う。。

 

LINQのメソッド(一部)

ではLINQの使い方が理解できたところで、
実際にLINQのメソッド(一部)を紹介する。

 

Where(ラムダ式)

条件を満たす要素を返す。

 

Select(ラムダ式)

各要素に処理をして、新しいデータを返す。

 

OrderBy(ラムダ式)

昇順に並べ替えたデータを返す。

 

OrderByDescending(ラムダ式)

降順に並べ替えたデータを返す。

 

Distinct(ラムダ式)

重複を除いたデータを返す。

 

Max(ラムダ式)

最大値を返す。

 

Min(ラムダ式)

最小値を返す。

 

Average(ラムダ式)

平均値を返す。

 

Sum(ラムダ式)

合計値を返す。

 

Count(ラムダ式)

要素数を返す。

 

All(ラムダ式)

全ての要素を条件を満たしているか判別する。

 

Any(ラムダ式)

条件を満たす要素が含まれているか判定する。

 

関連記事

c#-array-collection-difference
csharp-ref-out-differense

 

https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/lambda-expressions

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。