はじめに
本記事は エムティーアイ Advent Calendar 2021 の5日目の記事です。
昨日は @uhooi で 議事録を書くコツとテンプレート でした。
C#のLINQについて、よく使うメソッド構文のメソッドを紹介します。
「LINQ」とは?
「Language-Integrated Query」の略で、直訳すると「言語に統合されたクエリ」です。
ざっくりいうと「配列をかんたんに操作する便利機能」です。
LINQの構文の種類
LINQにはクエリ構文とメソッド構文の2種類があります。
以下の例はどちらも同じ意味です。
var scores = new int[] { 97, 92, 81, 60 };
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score;
var scores = new int[] { 97, 92, 81, 60 };
IEnumerable<int> scoreQuery = scores
.Where(score => score > 80);
クエリ構文はSQLに似ており、メソッド構文は関数型プログラミングに似ています。
2つの構文にパフォーマンスの違いはありません。
公式ドキュメントではできる限りクエリ構文を使うことが推奨されています。
しかし私はメソッド構文のほうが好きなので、本記事ではメソッド構文を紹介します。
Twitterでアンケートを取ったところ、僅差でクエリ構文を使っている人のほうが多かったです。
環境
- IDE:Visual Studio Professional 2019 for Mac Version 8.10.14 (build 17)
LINQのセットアップ
System.Linq
を using
するのみです。
using System.Linq;
LINQでよく使うメソッド構文一覧
LINQでよく使う、IEnumerable
に実装されているメソッド構文の一覧です。
私はSwiftが好きなので、似ている配列のメソッドを載せています。
メソッド名 | 説明 | Swift |
---|---|---|
.Select() |
要素を変換する | .map() |
.Select().Where(e => e is not null) |
要素を変換し、 null の要素を除外する |
.compactMap() |
.Where() |
要素を指定した条件で絞り込む | .filter() |
- | 要素を順番に繰り返す | .forEach() |
.OrderBy() |
要素を昇順に並び替える | .sorted() |
.OrderByDescending() |
要素を降順に並び替える | .sorted(by: >) |
.Reverse() |
要素を逆順に並び替える | .reversed() |
.Any() |
指定した条件に一つでも合致する要素があるかどうか | .contains() |
.All() |
指定した条件に全要素が合致するかどうか | .allSatisfy() |
.Contains() |
指定した要素が含まれているか | .contains() |
.First() |
最初の要素を返す | .first() |
.Last() |
最後の要素を返す | .last() |
.Skip({数字}) |
先頭から指定した数の要素をスキップしたリストを返す | array[{数字}...] |
.Take({数字}) |
先頭から指定した数の要素を返す | array[..<{数字}] |
.Max() |
要素の最大値を返す | .max() |
.Min() |
要素の最小値を返す | .min() |
.Average() |
要素の平均値を返す | array.reduce(.zero, +) / array.count |
.Sum() |
要素の合計を返す | .reduce(.zero, +) |
.Count() |
要素数を返す | .count |
.Distinct() |
重複を除く | Set(array) |
.ToArray() |
配列に変換する | - |
.ToList() |
リストに変換する | - |
おわりに
これでLINQを使って配列やリストをかんたんに操作できるようになりました
以上 エムティーアイ Advent Calendar 2021 の5日目の記事でした。
明日は @rtok さんで Protocol Oriented Programmingを使ってみて思ったこと です。