翻转的切换语句?

时间:2015-09-02 22:14:14

标签: switch-statement logic

考虑一下你有10个布尔变量,其中一次只能有一个是真的,每次开启任何一个,所有其他人都必须关闭#39;。立即出现的问题之一是;

  

如何在没有必要的情况下快速测试哪个变量是真的   每次必须线性检查所有变量状态?

为此,我在想是否有可能有这样的东西:

switch(true)
{
   case boolean1:
       //do stuff
   ...
   //other variables
}

这看起来像测试一个对象的10种不同状态的坏方法,但我认为在这种情况下这种功能可能有用,并且想知道是否有任何编程语言支持这种功能?

2 个答案:

答案 0 :(得分:2)

没有提供此行为的语言功能。但作为替代方案,您可以将命令模式与优先级队列结合使用。这假设您可以优先考虑应该进行哪些检查。

答案 1 :(得分:1)

传统上,当你有这样的radio button布尔值时,你使用一个整数来表示它们:

+------------+---------+--------------------+
|   BINARY   | DECIMAL | BINARY-LOGARITHMIC |
+------------+---------+--------------------+
| 0000000001 |       1 |                  0 |
| 0000000010 |       2 |                  1 |
| 0000000100 |       4 |                  2 |
| 0000001000 |       8 |                  3 |
| 0000010000 |      16 |                  4 |
| 0000100000 |      32 |                  5 |
| 0001000000 |      64 |                  6 |
| 0010000000 |     128 |                  7 |
| 0100000000 |     256 |                  8 |
| 1000000000 |     512 |                  9 |
+------------+---------+--------------------+

让我们调用保存此布尔值flag的变量。我们可以通过索引随机访问函数数组来快速跳转到基于flag的代码:

var functions = [ function0
                , function1
                , function2
                , function3
                , function4
                , function5
                , function6
                , function7
                , function8
                , function9
                ];

functions[flag]();          // quick jump

但是,您必须支付函数调用开销。