0

増え続けている SELECT/SWITCH ステートメントがあります。
とはいえ、現状19種類…これ以上に良いものはないでしょうか?

C# でのコーディング

いいえ:

switch (Request["typeOfRequest"].ToString())
        {
            case "comboFills":
                Response.ContentType = "text";
                Response.Write(getVizData());
                break;
            case "linkFormField":
                Response.ContentType = "text";
                Response.Write(getVizRuleFields());
                break;
            case "getDispositions":
4

1 に答える 1

2

Switch ステートメントはそれよりもはるかに大きくなる可能性があります...ただし、最終的には効率の問題が発生する可能性があります。19件は問題ないと思います。私はもっ​​と大きな声明を出しました。通常、switch ステートメントは処理のボトルネックにはならないため、最適化は最後に行います。

それぞれのケースはテストとジャンプとして CPU に変換されるため、最悪のケースがいくつになるかを考えて、大騒ぎする価値があるかどうか、および実際に節約できるオペレーションの数 (最悪のケースと平均の両方) を決定します。

そうは言っても、明らかなオプションがいくつかあります。数値型があり、それらが均等に分散されている場合は、switch ステートメントを複数のスイッチに分割できます....

if value < 50
  switch
    ...
  end
else if value < 100
  switch
    ...
  end
else
  ...
end

もちろん、これは維持するのがよりトリッキーであり、コードを醜くする定数値の知識に依存する可能性があります。それは本当にただの汚い検索ツリーです...

もう 1 つの方法は、すべてのケースを関数に入れ、各値を関数ハンドラーにマップするツリーまたはハッシュ テーブルを構築することです。そうすれば、常に O(logN) 回の検索時間 (またはハッシュ テーブルの場合はそれ以上) に依存できます。繰り返しますが、よほどの理由がない限り、これを行わないでください。

それがあなたにいくつかの洞察を与えるのに役立つことを願っています. 言語固有ではないことをお詫びします。言語については言及されていませんが、BASIC のようなものだと思います。

于 2012-08-01T15:44:46.297 に答える