「LINQ - 拡張メソッド一覧」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
編集の要約なし |
||
94行目: | 94行目: | ||
</source> | </source> | ||
<br><br> | <br><br> | ||
== 集計 == | == 集計 == | ||
<center> | <center> | ||
138行目: | 139行目: | ||
Console.WriteLine(source.Sum(e => Math.Pow(e - ave, 2)) / source.Count()); | Console.WriteLine(source.Sum(e => Math.Pow(e - ave, 2)) / source.Count()); | ||
// → 4.484375 | // → 4.484375 | ||
</source> | |||
<br><br> | |||
== ソート == | |||
<center> | |||
{| class="wikitable" | |||
|- | |||
! メソッド名 !! 機能 | |||
|- | |||
| OrderBy || 昇順にソートしたシーケンスを返す。 | |||
|- | |||
| OrderByDescending || 降順にソートしたシーケンスを返す。 | |||
|- | |||
| ThenBy || ソートしたシーケンスに対し、キーが等しい要素同士を昇順にソートしたシーケンスを返す。 | |||
|- | |||
| ThenByDescending || ソートしたシーケンスに対し、キーが等しい要素同士を降順にソートしたシーケンスを返す。 | |||
|- | |||
| Reverse || 逆順にソートしたシーケンスを返す。 | |||
|} | |||
</center> | |||
<source lang="c#"> | |||
var source = new[] { | |||
new{Name = "C#", Age = 11}, | |||
new{Name = "Java", Age = 16}, | |||
new{Name = "Groovy", Age = 8}, | |||
new{Name = "Scala", Age = 8}, | |||
}; | |||
Console.WriteLine(source.OrderBy(e => e.Age).ToResult()); | |||
// → {{ Name = Groovy, Age = 8 }, | |||
// { Name = Scala, Age = 8 }, | |||
// { Name = C#, Age = 11 }, | |||
// { Name = Java, Age = 16 }} | |||
Console.WriteLine(source.OrderByDescending(e => e.Age).ToResult()); | |||
// → {{ Name = Java, Age = 16 }, | |||
// { Name = C#, Age = 11 }, | |||
// { Name = Groovy, Age = 8 }, | |||
// { Name = Scala, Age = 8 }} | |||
Console.WriteLine(source.OrderBy(e => e.Age).ThenBy(e => e.Name.Length).ToResult()); | |||
// → {{ Name = Scala, Age = 8 }, | |||
// { Name = Groovy, Age = 8 }, | |||
// { Name = C#, Age = 11 }, | |||
// { Name = Java, Age = 16 }} | |||
Console.WriteLine(source.OrderBy(e => e.Age).ThenByDescending(e => e.Name.Length).ToResult()); | |||
// → {{ Name = Groovy, Age = 8 }, | |||
// { Name = Scala, Age = 8 }, | |||
// { Name = C#, Age = 11 }, | |||
// { Name = Java, Age = 16 }} | |||
Console.WriteLine(source.Reverse().ToResult()); | |||
// → {{ Name = Scala, Age = 8 }, | |||
// { Name = Groovy, Age = 8 }, | |||
// { Name = Java, Age = 16}, | |||
// { Name = C#, Age = 11 }} | |||
</source> | </source> | ||
<br><br> | <br><br> |
2019年10月24日 (木) 17:09時点における版
概要
C#のLINQを種類ごとにまとめて、簡単なサンプルを記述する。
結果の表示に、独自の拡張メソッドToResult(this IEnumerable)を使用している。
このメソッドは、本文の最後に記載する。(サンプルコードのダウンロードはこちら)
要素の取得(単一)
該当の要素がない場合
- ~OrDefaultが付いていないメソッドは例外をスローする。
- ~OrDefaultが付いたメソッドは型の規定値を返す。
メソッド名 | 機能 |
---|---|
ElementAt ElementAtOrDefault |
指定した位置(インデックス)にある要素を返す。 |
First FirstOrDefault |
最初の要素を返す。 |
Last LastOrDefault |
最後の要素を返す。 |
Single SingleOrDefault |
唯一の要素を返す。該当する要素が複数ある場合、例外をスローする。 |
var source = new[] { 3, 4, 5, 6, 7, 8, 9, 9 };
Console.WriteLine(source.ElementAt(2));
// → 5
Console.WriteLine(source.ElementAtOrDefault(10));
// → 0
Console.WriteLine(source.First());
// → 3
Console.WriteLine(source.First(e => e > 5));
// → 6
Console.WriteLine(source.Last());
// → 9
Console.WriteLine(source.Last(e => e < 5));
// → 4
Console.WriteLine(source.Single());
// → System.InvalidOperationException: シーケンスに複数の要素が含まれている
Console.WriteLine(source.Single(e => e < 4 ));
// → 3
要素の取得(複数)
メソッド名 | 機能 |
---|---|
Where | 条件を満たす要素をすべて返す。 |
Distinct | 重複を除いたシーケンスを返す。 |
Skip | 先頭から指定された数の要素をスキップし、残りのシーケンスを返す。 |
SkipWhile | 先頭から指定された条件を満たさなくなるまで要素をスキップし、残りのシーケンスを返す。 |
Take | 先頭から指定された数の要素を返す。 |
TakeWhile | 先頭から指定された条件を満たす要素を返す。 |
var source = new[] { 3, 4, 5, 6, 7, 8, 9, 9 };
Console.WriteLine(source.Where(e => e > 5).ToResult());
// → {6, 7, 8, 9, 9}
Console.WriteLine(source.Distinct().ToResult());
// → {3, 4, 5, 6, 7, 8, 9}
Console.WriteLine(source.Skip(5).ToResult());
// → {8, 9, 9}
Console.WriteLine(source.SkipWhile(e => e < 5).ToResult());
// → {5, 6, 7, 8, 9, 9}
Console.WriteLine(source.Take(5).ToResult());
// → {3, 4, 5, 6, 7}
Console.WriteLine(source.TakeWhile(e => e < 5).ToResult());
// → {3, 4}
集計
メソッド名 | 機能 |
---|---|
Max | 最大値を返す。 |
Min | 最小値を返す。 |
Average | 平均値を返す。 |
Sum | 合計を返す。 |
Count | 要素数を返す。 |
Aggregate | アキュムレータ関数で処理した結果を返す。 |
var source = new[] { 3, 4, 5, 6, 7, 8, 9, 9 };
Console.WriteLine(source.Max());
// → 9
Console.WriteLine(source.Min());
// → 3
Console.WriteLine(source.Average());
// → 6.375
Console.WriteLine(source.Sum());
// → 51
Console.WriteLine(source.Count());
// → 8
Console.WriteLine(source.Aggregate((now, next) => now * next));
// → 1632960
// 参考:標本分散
double ave = source.Average();
Console.WriteLine(source.Sum(e => Math.Pow(e - ave, 2)) / source.Count());
// → 4.484375
ソート
メソッド名 | 機能 |
---|---|
OrderBy | 昇順にソートしたシーケンスを返す。 |
OrderByDescending | 降順にソートしたシーケンスを返す。 |
ThenBy | ソートしたシーケンスに対し、キーが等しい要素同士を昇順にソートしたシーケンスを返す。 |
ThenByDescending | ソートしたシーケンスに対し、キーが等しい要素同士を降順にソートしたシーケンスを返す。 |
Reverse | 逆順にソートしたシーケンスを返す。 |
var source = new[] {
new{Name = "C#", Age = 11},
new{Name = "Java", Age = 16},
new{Name = "Groovy", Age = 8},
new{Name = "Scala", Age = 8},
};
Console.WriteLine(source.OrderBy(e => e.Age).ToResult());
// → {{ Name = Groovy, Age = 8 },
// { Name = Scala, Age = 8 },
// { Name = C#, Age = 11 },
// { Name = Java, Age = 16 }}
Console.WriteLine(source.OrderByDescending(e => e.Age).ToResult());
// → {{ Name = Java, Age = 16 },
// { Name = C#, Age = 11 },
// { Name = Groovy, Age = 8 },
// { Name = Scala, Age = 8 }}
Console.WriteLine(source.OrderBy(e => e.Age).ThenBy(e => e.Name.Length).ToResult());
// → {{ Name = Scala, Age = 8 },
// { Name = Groovy, Age = 8 },
// { Name = C#, Age = 11 },
// { Name = Java, Age = 16 }}
Console.WriteLine(source.OrderBy(e => e.Age).ThenByDescending(e => e.Name.Length).ToResult());
// → {{ Name = Groovy, Age = 8 },
// { Name = Scala, Age = 8 },
// { Name = C#, Age = 11 },
// { Name = Java, Age = 16 }}
Console.WriteLine(source.Reverse().ToResult());
// → {{ Name = Scala, Age = 8 },
// { Name = Groovy, Age = 8 },
// { Name = Java, Age = 16},
// { Name = C#, Age = 11 }}