中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

1行でかけることは効率のいいことなのか?

★案A

string X;
foreach(ABC A in List<ABC>)
{
   X += A.ToString();
}

★案B

string X;
List.ForEach(delegate(ABC A)
{
   X += A.ToString();
});

★案C

string X;
List.ForEach(functionA)

functionA(ABC A)
{
   X += A.ToString();
});

★案D

stirng x = functionA(A);

string functionA(List<ABC> A)
{
  foreach(ABC A in List<ABC>)
  {
     X += A.ToString();
  }
}

結局1行でかけたとして、表面上ループしていないように見えたとして、何か効率がいいのでしょうか?

この中でしいていうなら案Cが一番効率がいいように思えますが、まぁどんぐりでしょう。

 

投稿日時 : 2006年6月22日 9:55

コメントを追加

# re: 1行でかけることは効率のいいことなのか? 2006/06/22 11:21 河端善博

お世話になっております。先日は、勉強会にいけず失礼いたしました。

案C は、SQL のセットタイプのように見えていいですね。
SSIS のような考え方を使いやすいのもか。

例:
List.ForEach(functionA)
List.ForEach(functionB)
if (xxxx)
{
List.ForEach(functionC)
}
else
{
List.ForEach(functionD)
}

List に対して、複数の処理を、業務にあわせて適用していきたい場合に扱いやすいコードに思われます。
また、ForEach が、内部でスレッドを使った並列処理をしてくれるとさらにいいですね。

例:
List.ForEachX(functionA)

とすると、Thread を使って、複数の CPU Core をフルに買ってくれると。

# re: 1行でかけることは効率のいいことなのか? 2006/06/22 22:05 Jitta

 1行で書ければ、「書くこと」に関しては、効率が良いでしょう;p

> 表面上ループしていないように見えた
これは、困る。。。ループしていることが読み取ってもらえないと、困る。


 このコードなら、x を StringBuilder にすることの方が、よっぽど効率的でではないしょうか;)

# re: 1行でかけることは効率のいいことなのか? 2006/06/25 11:47 渋木宏明(ひどり)

StringBuilder 使え、というツッコミはお呼びでないですね?w
自分自身、局所的には案Aで書いてしまいますね。
同じオペレーションが再利用されるのが分かっていれば案Cで書きます。
なんですが、ラムダ式が使えるようになったらラムダ式で書いた方が、操作する対象に応じた最適化が期待できるんで、その方がいいんでしょうね。

# re: 1行でかけることは効率のいいことなのか? 2006/06/25 23:50 中博俊

もちろん(^^;
というよりは、ループしていることが悪いのではなくconcat(+=)しているのが悪いのだから・・・

ということですね。(^^

タイトル
名前
URL
コメント