-5

私は多くの if/case 関数を通過しなければならないコードを作成しています。これ自体は実際には問題ではありませんが、これらの if の多くは同じようなものです。

私のコードでは、if関数を通過する必要があり、一致する場合、それがどの一致であるかは問題ではなく、同じ次のifを通過する必要があります。ただし、両方の回答によっては、コードの別の部分に移動する必要があります。

たとえば、次のようになります。

    Switch(A){

    case 1:
     Switch(B){
      case 1: do11thing();
      case 2: do12thing();
     }

    case 2:
     Switch(B){
      case 1: do21thing();
      case 2: do22thing();
     }

}

コード内に Switch(B) を何度も配置する代わりに、解決策を知っている人はいますか?

4

3 に答える 3

1

値 2 を返す関数に 1 つの if を使用できます。次に、この if 内ですべての可能性を異なるスイッチケースとして使用できます。複数の if ループよりもスムーズで高速です。

例:-

if (2 == function1) {
switch(value of function 2)
{
case value_1:
..//do whatever u want;
break;
case value_2:
..//do whatever u want;
break;
default:
//do some error handling;
break;
}

}

于 2013-05-01T13:32:19.293 に答える
0

できることの 1 つは、ケースを結合することです。たとえば、外側のスイッチ変数である文字列値と、内側のスイッチ変数である int があるとします。元のコードは次のようになります。

switch (theString)
{
    case "Foo":
        switch (theInt)
        {
            case 1: DoThing1(); break;
            case 2: DoThing2(); break;
            // many other cases
        }
        DoFooThing();
        break;
    case "Bar":
        switch (theInt)
        {
            case 1: DoThing1(); break;
            case 2: DoThing2(); break;
            // other cases, same as with "Foo"
        }
        DoBarThing();
        break;
}

ケースを組み合わせて、条件付きにすることができます。

switch (theString)
{
    case "Foo":
    case "Bar":
        switch (theInt)
        {
            case 1: DoThing1(); break;
            case 2: DoThing2(); break;
            // many other cases
        }
        if (theString == "Foo")
            DoFooThing();
        else
            DoBarThing();
        break;
}

説明しているロジックのタイプは、特に非常に多くのケースがある場合は、おそらくルックアップ テーブルを使用して実装するのが最適です。そうすることで、ロジックに従うのがはるかに簡単になります。セットアップにはもう少し時間がかかりますが、入力値の任意の組み合わせで何が起こるかを正確に構築することが表で簡単にわかります。

于 2013-05-01T14:00:57.357 に答える