からだのブログ

五体満足に生まれてきたことに感謝してブログの名前を「からだ」にしました。

からだのブログ header image 2

Let’s Linq [1]

2月 26th, 2008 · No Comments · .net

CSVファイルの1行を string[] から吐き出す処理を考える。

ふつーはライブラリ化されてるものを使うか、即席でライブラリを作るもんだが、(ほんの)少し面倒くさい。(いや、こんなことで面倒なんて言ってたら、、、とかは言わないでw)

var names = new[]{“tksk”, “hoge”, “fuga”};

配列の要素数0は無いってことにして、パフォーマンス考えないと、

var csv = names[0];
for(int i=1; i<names.Length; i++)
{
    csv += “,” + names[i];
}

って感じになるだろうか。もう一つは、

var csv = “”;
for(int i=0; i<names.Length; i++)
{
    csv += names[i] + “, “;
}
csv = csv.Remove(csv.Length – 2);

かな。うん、スマートじゃないよね。そう、ここは「スマートじゃない」と言うべきところなの。で、「じゃあ、Linqだとどうなるの?」って訊くべきところなの。で、Linqっぽくする。

var csv = names.Aggregate((ss, s) => ss + “, ” + s);

終わり。やっべー。かっこいいぜ。System.Linq名前空間の中で、俺は Aggregate() が一番のお気に入り。何でって、ほら、素敵じゃん。

実は、Aggregate() にはオーバーロードがあと2つあって、それも素敵なんだけど、いい利用例が思いつかないので、出てきたらまた書いてみる。

Tags: