LoginSignup
1
4

More than 5 years have passed since last update.

Linq の Aggregate メソッドのオーバーロードごとの挙動まとめ

Last updated at Posted at 2018-01-30

はじめに

System.Linq.Enumerable クラスの Aggregate メソッドで、どの呼び出し型を使用したらよいか迷ったとき、つぎの表で解決できると幸いです。Linq を便利に使いたい!

挙動

呼び出し型 列挙元の要素の型 初期値の型 処理Funcで列挙される型 結果の型
Enumerable.Aggregate
<TSource>
TSource TSource
列挙元の先頭要素
TSource
列挙元の要素の2つ目から
TSource
Enumerable.Aggregate
<TSource, TAccumulate>
TSource TAccumulate TSource
列挙元すべて
TAccumulate
Enumerable.Aggregate
<TSource, TAccumulate, TResult>
TSource TAccumulate TSource
列挙元すべて
TResult

引数指定

■ 処理Func (func) :
Func < 処理前の蓄積(最初は初期値)(TAccumulateかTSource), 列挙された要素(TSource), 処理結果とする蓄積(TAccumulateかTSource) >

ラムダ式
(処理前の蓄積, 列挙されてきた列挙元の要素) => { return 処理結果とする蓄積; }

■ 結果変換処理Func (resultSelector) :
Func < 蓄積(TAccumulate), 結果(TResult) >

ラムダ式
(蓄積) => { return 結果; }

どの呼び出し型にするか悩む原因?の考察

基本的には「初期値 -> 列挙元全要素を要素ごとに処理 -> 結果」となる処理ですが、Enumerable.Aggregate<TSource> だけは、列挙元の要素のうち最初のひとつが初期値とされ、2個目の要素から処理Funcが呼び出される(要素がひとつだけなら、そのひとつの要素がそのままが返される)点で他と異なることが、(私にとっては)理解しづらかった原因かも。。

1
4
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
1
4