LoginSignup
14
5

More than 3 years have passed since last update.

【C#】LINQで使用頻度が高い(と思う)拡張メソッドのチートシート

Posted at

最初に

どうも、ろっさむです。

今回は使用頻度の高いLINQの拡張メソッドと使い方を自分用にまとめようと思います。
今後「使うなー」って思ったものは随時追加することがあります。

拡張メソッド群

以下はSystem.Linq.Enumerableの拡張メソッドを表にしたものです。

判定系一覧

メソッド名 判定内容
All すべての要素が条件を満たすかどうか
Any 条件を満たす要素が含まれているかどうか
Contains 指定した要素が含まれているかどうか

サンプルコード

All:すべての要素が条件を満たすかどうか

var index = new[] { 10, 20, 30, 40, 50 };

bool isAll = index.All(i => i > 40);
// isAll は false

Any:条件を満たす要素が含まれているかどうか

var index = new[] { 10, 20, 30, 40, 50 };

bool isAny = index.Any(i => i > 40);
// isAny は true

Contains:指定した要素が含まれているかどうか

var index = new[] { 10, 20, 30, 40, 50 };

bool isContains = index.Contains(40);
// isContains は true

集計系一覧

メソッド名 戻り値
Max 最大値
Min 最小値
Sum 合計値
Count 要素数
Average 平均値

サンプルコード

Max:最大値を返す

var index = new[] { 10, 20, 30, 40, 50 };

var maxNum = index.Max();
// maxNum は 50

Min:最小値を返す

var index = new[] { 10, 20, 30, 40, 50 };

var minNum = index.Min();
// minNum は 10

Sum:合計値を返す

var index = new[] { 10, 20, 30, 40, 50 };

var sumNum = index.Sum();
// sumNum は 150

Count:要素数を返す

var index = new[] { 10, 20, 30, 40, 50 };

var countNum = index.Count();
// countNum は 5

Average:平均値を返す

var index = new[] { 10, 20, 30, 40, 50 };

var averageNum = index.Average();
// averageNum(double) は 30

単一要素を取得する系一覧

以下は指定した要素が存在しない場合は例外を投げます。

メソッド名 戻り値
ElementAt 指定した位置の要素
First 最初の要素
Last 最後の要素
Single 唯一の要素

以下は指定した要素が存在しない場合は型のデフォルト値を返します。

メソッド名 戻り値
ElementAtOrDefault 指定した位置の要素
FirstOrDefault 最初の要素
LastOrDefault 最後の要素
SingleOrDefault 唯一の要素

サンプルコード

ElementAt系:指定した位置の要素を返す

var index = new[] { 10, 20, 30, 40, 50 };

var elementAtNum = index.ElementAt(1);
// elementAtNum は 20

var elementAtDefaultNum = index.ElementAtOrDefault(6);
// elementAtDefaultNum は 0

First系:最初の要素を返す

var index = new[] { 10, 20, 30, 40, 50 };

var firstNum = index.First();
// firstNum は 10

var firstNum2 = index.First(i => i > 30);
// firstNum2 は 40

var firstDefaultNum = index.FirstOrDefault(i => i > 70);
// firstDefaultNum は 0

Last系:最後の要素を返す

var index = new[] { 10, 20, 30, 40, 50 };

var lastNum = index.Last();
// lastNum は 50

var lastNum2 = index.Last(i => 40 > i);
// lastNum2 は 30

var firstDefaultNum = index.LastOrDefault(i => i > 70);
// firstDefaultNum は 0

Single系:唯一の要素を返す

こちらは要素が2つ以上あった場合は例外が発生します。

var index = new[] { 10, 20, 30, 40, 50 };

var singleNum = index.Single();
// System.InvalidOperationException: シーケンスに複数の要素が含まれています

var singleDefaultNum = index.SingleOrDefault(i => i > 40);
// singleDefaultNum は 50

複数要素を取得する系一覧

メソッド名 戻り値
Where 条件を満たす要素全てを含むシーケンス
Distinct 重複を除外したシーケンス
Skip 指定された数だけ先頭からスキップした残りのシーケンス
Take 先頭から指定された数までのシーケンス

サンプルコード

Where:条件を満たす要素全てを返す

var index = new[] { 10, 20, 30, 40, 50 };

var whereIndex = index.Where(i => i > 20);
// whereIndex は { 30, 40, 50 }

Distinct:重複を除外したシーケンスを返す

var index = new[] { 10, 10, 10, 40, 50 };

var distinctIndex = index.Distinct();
// distinctIndex は { 10, 40, 50 }

Skip:指定された数だけ先頭からスキップした残りのシーケンスを返す

var index = new[] { 10, 20, 30, 40, 50 };

var skipIndex = index.Skip(2);
// skipIndex は { 30, 40, 50 }

Take:先頭から指定された数までのシーケンスを返す

var index = new[] { 10, 20, 30, 40, 50 };

var takeIndex = index.Take(2);
// takeIndex  は { 10, 20 }

ソート系一覧

メソッド名 戻り値
OrderBy 昇順にソートしたシーケンス
OrderByDescending 降順にソートしたシーケンス
Reverse 逆順にソートしたシーケンス

サンプルコード

OrderBy:昇順にソートしたシーケンスを返す

var index = new[] { 50, 40, 30, 20, 10 };

var orderByIndex = index.OrderBy(i => i);
// orderByIndex は { 10, 20, 30, 40, 50 }

OrderByDescending:降順にソートしたシーケンスを返す

var index = new[] { 10, 20, 30, 40, 50 };

var orderByDescendingIndex = index.OrderByDescending(i => i);
// orderByDescendingIndex は { 50, 40, 30, 20, 10 }

Reverse:逆順にソートしたシーケンスを返す

var index = new[] { 10, 20, 30, 40, 50 };

var reverseIndex = index.Reverse();
// reverseIndex は { 50, 40, 30, 20, 10 }

射影系

メソッド名 戻り値
Select 1つの要素を単一の要素に射影したシーケンス

サンプルコード

Select:昇順にソートしたシーケンスを返す

var data = new[] {
    new{Name = "Taro", Age = 20},
    new{Name = "Sato", Age = 25},
    new{Name = "Piyo", Age = 10},
};

var selectData = data.Select(i => i.Name);
// selectData は { "Taro", "Sato", "Piyo" }

変換系一覧

メソッド名 戻り値
OfType 指定した型にキャストしたシーケンス(キャストできない場合、除外)
Cast 指定した型にキャストしたシーケンス(キャストできない場合、例外を投げる)
ToArray 配列
ToList リスト

サンプルコード

OfType:指定した型にキャストしたシーケンスを返す

var index = new[] { 50, 40, 30, 20, 10 };

var ofTypeNum  = index.OfType<float>();
// ofTypeNum  は float型のシーケンスに変換

Cast:指定した型にキャストしたシーケンスを返す

var index = new[] { 10, 20, 30, 40, 50 };

var ofCastNum  = index.Cast<float>();
// ofCastNum  は float型のシーケンスに変換

ToArray:配列を返す

var index = new[] { 10, 20, 30, 40, 50 };

var arrayIndex  = index.ToArray();
// arrayIndexは int型配列に変換

ToList:リストを返す

var index = new[] { 10, 20, 30, 40, 50 };

var listIndex  = index.ToList();
// listIndex  は int型Listに変換

参考

14
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
5