##LINQって最高だと思う
初投稿になります。間違いや勘違いがあればご指摘いただけましたら幸いです。
c#を書き出して一年程度なのですが、LINQってすごく便利だなと感じております。
LINQを多少使えるようになったばかりのころは
使えるところでは極力使えるようにしていました。
その際に職場の上司に指摘されたことを書きたいと思います。
##それLINQ使わなかったら1回のループですむよね?
たとえばdoubleのリストから最大値、最小値、平均値を求めたい場合
List<double> doubleList = "doubleのList";
//1回目ループ
var max = doubleList.Max();
//2回目ループ
var min = doubleList.Min();
//3回目ループ
var average = doubleList.Average();
みたいな取り方をしていたのですが、
これは3回ループしています。
下記ならば1回のループで済みます。
List<double> doubleList = "doubleのList";
var max = double.NaN;
var min = double.NaN;
double sum = 0;
// ここで1回すだけ
foreach (double d in doubleList)
{
if (double.IsNaN(max) || max < d)
max = d;
if (double.IsNaN(min) || min > d)
min = d;
sum += d;
}
var average = sum / doubleList.Count();
上記のソースでNaNチェックを毎回することを考えると
List<double> doubleList = "doubleのList";
// NaNチェックを避けるため1つ目の値をいれておく
var max = doubleList.First();
var min = doubleList.First();
double sum = 0;
// ここで1回すだけ
foreach (double d in doubleList)
{
if (max < d)
max = d;
if (min > d)
min = d;
sum += d;
}
var average = sum / doubleList.Count();
みたいな書き方したほうがいいと思います。
もちろんデータの数が1000件とかならLINQの方が簡潔でいいと思いますが、
何百万件、何千万件というデータを扱う場合は気を付けようと思います。
でもこれってどれぐらいの件数からLINQを使うべきでないのかのラインって
計測してみないとわからないですね。
また、休日にでも計測してみたいと思います。