https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.defaultifempty?view=netcore-3.1
上記からよく使いそうなメソッドをまとめました
- Any
- All
- Append
- Average
- Cast
- Concat
- Contains
- Count
- Where
- First
- FirstOrDefault
- GroupBy
- Last
- LastOrDefault
- Max
- Min
- OrderBy
- OrderByDescending
- Reverse
- Select
- Skip
- Take
- SkipWhile
- TakeWhile
- Sum
Any
条件を満たすかどうか
引数がない場合は要素の中が空かどうか
// 空かどうか list.Any(); // 5以上があるかどうか list.Any(i => i > 5);
All
すべてが条件を満たすかどうか
// すべてが5以上かどうか list.All(i => i >= 5);
Append
要素の最後に追加する
この際にはコピーが作成される
// 最後に10を追加する list.Append(10);
Average
平均を求める
var list = new List<int>(){10, 5, 15}; // 10 list.Average();
Cast
型を変換する
var list = new List<int>{1, 2, 3, 4}; // Float に変換 list.Cast<float>();
Concat
配列の結合
var list1 = new List<int>{1, 2, 3, 4}; var list2 = new List<int>{5, 6}; list1.Concat(list2);
Contains
// 配列に2が含まれているかどうか list.Contains(2);
Count
配列の要素数
var list = new List<int>{1, 2, 3, 4}; // 4 list.Count();
Where
条件を満たすもの取得する
list.Where(i => i > 5);
First
最初に条件を満たすものを取得する
list.First(i => i > 5);
満たすものが無い場合エラーになるので注意 InvalidOperationException: Sequence contains no matching element
FirstOrDefault
最初に条件を満たすものを取得する
条件を満たすものがなかった場合 primitive型であれば default
クラスであれば null
が取得できる
var intList = new List<int>(){0, 1}; intList.FirstOrDefault(i => i > 5); // 0 var classList = new List<Test>(){new Test(0), new Test(1)}; classList.FirstOrDefault(i => i.Value > 5); // null private class Test { public int Value; public Test(int v) { Value = v; } }
GroupBy
Key を指定してグループ化できる
var list = new List<Vector3Int>() { Vector3Int.one, Vector3Int.zero, Vector3Int.up }; // .x の値でグループ化する var group = list.GroupBy(l => l.x); // foreach で回す場合はこう記述する foreach (var g in group) { // g.Key foreach (var value in g) { // check value } }
Last
最後に条件を満たすものを取得する
list.Last(i => i > 5);
満たすものが無い場合エラーになるので注意 InvalidOperationException: Sequence contains no matching element
LastOrDefault
最後に条件を満たすものを取得する
条件を満たすものがなかった場合 primitive型であれば default
クラスであれば null
が取得できる
var intList = new List<int>(){0, 1}; intList.FirstOrDefault(i => i > 5); // 0 var classList = new List<Test>(){new Test(0), new Test(1)}; classList.FirstOrDefault(i => i.Value > 5); // null private class Test { public int Value; public Test(int v) { Value = v; } }
Max
最大値を取得する
var intList = new List<int>(){0, 1}; intList.Max(); // StructやClassの場合はどの値かを指定できる var vectorList = new List<Vector2>(){Vector2.one, Vector2.zero}; vectorList.Max(v => v.x);
Min
最小値を取得する
var intList = new List<int>(){0, 1}; intList.Min(); // StructやClassの場合はどの値かを指定できる var vectorList = new List<Vector2>(){Vector2.one, Vector2.zero}; vectorList.Min(v => v.x);
OrderBy
昇順に並べ替える
var intList = new List<int>(){0, 1}; intList.OrderBy(v => v);
OrderByDescending
降順に並べ替える
var intList = new List<int>(){0, 1}; intList.OrderByDescending(v => v);
Reverse
並びを逆にする
var intList = new List<int>(){0, 1}; // 1, 0 intList.Reverse();
Select
指定した要素を取得する
var vectorList = new List<Vector2>(){Vector2.one, Vector2.zero}; // Vector3Int の X だけの要素にする var xList = vectorList.Select(v => v.x);
Skip
指定した数スキップする
// 先頭から4要素スキップする list.Skip(4);
Take
指定した数取得する
要素が足りない場合は取得できる分だけ
// 先頭から4要素取得する list.Take(4);
SkipWhile
条件を満たす間スキップする
// 3以上の値が来るまでスキップする list.SkipWhile(i => i < 3)
TakeWhile
条件を満たすまで取得する
// 3以上の値が来るまで取得する list.SkipWhile(i => i < 3)
Sum
合計値を取得する
var intList = new List<int>(){1, 10}; intList.Sum(); // StructやClassの場合はどの値かを指定できる var vectorList = new List<Vector2>(){Vector2.one, Vector2.zero}; vectorList.Sum(v => v.x);