我有3个不同的变量,所有3个变量都有2个不同的值。每个组合都需要做其他事情。我可以将它全部放入IF语句中,但我想知道是否没有更优雅/适当/更短的解决方案。 3个变量的值可以是1或0(如二进制真值表)。
答案 0 :(得分:0)
虽然它并不比二进制分支更严格地效率(除非你可以预测参数的频率),但另一种选择是使用VBA语法的特性并将其放入{{1}结构:
Select Case
看起来比If替代方案更容易:
Private Sub Example(one As Boolean, two As Boolean, three As Boolean)
Select Case True
Case one And Not two And Not three
Debug.Print "Case 1"
Case one And Not two And three
Debug.Print "Case 2"
Case one And two And Not three
Debug.Print "Case 3"
Case one And two And three
Debug.Print "Case 4"
Case two And Not three
Debug.Print "Case 5"
Case two And three
Debug.Print "Case 6"
Case three
Debug.Print "Case 7"
Case Else
Debug.Print "Case 8"
End Select
End Sub
当我针对更糟糕的情况(单独运行,清除每个运行之间的直接窗口)进行基准测试时,性能差异仅在20万次迭代中大约为20ms。绝大多数性能提升将来自确定评估变量的 order - 即哪些分支更有可能。