较长的Switch...Case...语句如何精简?[已解决]
本帖最后由 cashiba 于 2017-4-7 21:41 编辑local $arr=['12','1','2','3','4','5','6','7','8','9','10','11','12']
local $brr=['15','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
Switch @Month
Case 1
$sMsg = "a"
Case 2
$sMsg = "b"
Case 3
$sMsg = "c"
Case 4
$sMsg = "d"
Case 5
$sMsg = "e"
Case 6
$sMsg = "f"
Case 7
$sMsg = "g"
Case 8
$sMsg = "h"
Case 9
$sMsg = "i"
Case 10
$sMsg = "j"
Case 11
$sMsg = "k"
Case 12
$sMsg = "l"
EndSwitch如上,条件选择语句,与两个数组对应。
假如数组元素比较多,达数百上千个的话,switch语句将很长。
用如下循环方式local $arr=['12','1','2','3','4','5','6','7','8','9','10','11','12']
local $brr=['15','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
Switch $arr
for $i=1 to $arr
Case $arr[$i]
$sMsg = $brr[$i]
next
EndSwitch书写代码的话语法上又不可行。
改成如下方式一一赋值的话,每选择一次都要遍历一次数组local $arr=['12','1','2','3','4','5','6','7','8','9','10','11','12']
local $brr=['15','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
for $i=1 to $arr
if $m=$arr[$i]then $sMsg = $brr[$i]
next
除了资源浪费,在逻辑上又觉得跟switch语句不一样。
最终目的
减少书写代码时重复复制粘贴劳动是一方面
另一方面是能精简代码,使之更直观,效率更高。 我也有过这样的经历,Switch里面Case有30多个。后面竟然发现较后面的Case语句竟然不起作用,只好分开,多加几组Switch Case语句才可以有效。期待有更精简的方案出现。 本帖最后由 1361739590 于 2017-4-7 11:28 编辑
这个要看情况的。
比如你这个
local $brr=['12','a','b','c','d','e','f','g','h','i','j','k','l']
Switch @MON
Case 1 to 12
$sMsg = $brr[@MON]
EndSwitch
MsgBox(0,"",$sMsg) 这个要看情况的。
比如你这个
1361739590 发表于 2017-4-7 11:25 http://www.autoitx.com/images/common/back.gif
代码改自于帮助文件示例,只是为了说清问题,实际操作中不会这么有规律阿
case条件是数组,不一定就是连续整数
{:face (288):} 本帖最后由 1361739590 于 2017-4-7 12:53 编辑
回复 4# cashiba
所以要 具体情况具体 来分析,看你分类分的好不好了。楼上那个30多个case中怀疑有重复的地方。
想用switch的话,Case后面是具体的值。Select的case后面是表达式。
不同的情况不一样,或者不用上面的两种。 回复 1# cashiba
DIM $arr
$arr="01"
$arr="1月"
$arr="02"
$arr="2月"
$arr="03"
$arr="3月"
$arr="04"
$arr="4月"
$arr="05"
$arr="5月"
$arr="06"
$arr="6月"
$arr="07"
$arr="7月"
$arr="08"
$arr="8月"
$arr="09"
$arr="9月"
$arr="10"
$arr="10月"
$arr="11"
$arr="11月"
$arr="12"
$arr="12月"
For $i=0 To UBound($arr)-1 STEP 1
IF $arr[$i]=@MON Then $M=$i
Next
Switch $M
Case $M
MsgBox(0,"",$arr[$M])
EndSwitch 回复cashiba
kk_lee69 发表于 2017-4-7 13:28 http://www.autoitx.com/images/common/back.gif
嗯,这个办法应该可行,把表达式映射转换一下。
从运行效率上来说,老老实实一个case一个case的堆砌,虽然代码写起来麻烦,但是运行起来也许最快捷稳定有效....
就不纠结这个喽
{:face (239):}
页:
[1]