给出一种较好的替换switch case的方法 除了map映射还有么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给出一种较好的替换switch case的方法 除了map映射还有么相关的知识,希望对你有一定的参考价值。
什么语言的?怎么还用map映射?最简单的就是用
if
else if
else
这样的语句来替换追问
你们说的都是治标不治本 如果用if else 那么会编译器会对每一个分支进行出口判断 另外 ,如果判断条件很多 比如20 个 每一个条件下要执行很长代码你怎么处理呢??? 用函数指针,加上条件的map映射是正解
参考技术A 还可以使用库函数find()啊 参考技术B map映射时间复杂度已经最低了,应该煤有更好的方法了吧追问同意你的看法 已经搞定了 设计了一个逻辑表 然后用函数指针和逻辑规则填的map
本回答被提问者采纳我可以使用带有两个变量的case / switch语句吗?
在JavaScript方面我是新手,我的理解是使用一个SWITCH / CASE语句比一大堆IF语句更快。
但是,我想使用带有两个变量的SWITCH / CASE语句。
我的网络应用程序有两个滑块,每个滑块有五种状态。我希望行为基于这两个变量的状态。显然,这是很多IF / THEN陈述的全部内容。
我想到的一种方法是将两个变量连接成一个然后我可以SWITCH / CASE。
有没有更好的方法来使用两个变量完成SWITCH / CASE?
谢谢 !
一个按位运算符怎么样?而不是字符串,你处理“enums”,看起来更“优雅”。
// Declare slider's state "enum"
var SliderOne = {
A: 1,
B: 2,
C: 4,
D: 8,
E: 16
};
var SliderTwo = {
A: 32,
B: 64,
C: 128,
D: 256,
E: 512
};
// Set state
var s1 = SliderOne.A,
s2 = SliderTwo.B;
// Switch state
switch (s1 | s2) {
case SliderOne.A | SliderTwo.A :
case SliderOne.A | SliderTwo.C :
// Logic when State #1 is A, and State #2 is either A or C
break;
case SliderOne.B | SliderTwo.C :
// Logic when State #1 is B, and State #2 is C
break;
case SliderOne.E | SliderTwo.E :
default:
// Logic when State #1 is E, and State #2 is E or
// none of above match
break;
}
然而,我同意其他人的看法,25个案例的交换案例逻辑并不太漂亮,如果 - 在某些情况下可能“看起来”更好。无论如何。
var var1 = "something";
var var2 = "something_else";
switch(var1 + "|" + var2) {
case "something|something_else":
...
break;
case "something|...":
break;
case "...|...":
break;
}
如果你有5种可能性,你将得到25个案例。
首先,JavaScript's switch
is no faster than if/else
(and sometimes much slower)。
其次,将switch
与多个变量一起使用的唯一方法是将它们组合成一个原语(字符串,数字等)值:
var stateA = "foo";
var stateB = "bar";
switch (stateA + "-" + stateB) {
case "foo-bar": ...
...
}
但是,就个人而言,我宁愿看到一组if
/ else
陈述。
编辑:当所有值都是整数时,如果Chrome中的/是,则开关可能会超出。查看评论。
我不认为开关/案例比if / elseif系列更快。他们做同样的事情,但如果/ elseif你可以检查多个变量。您不能在多个值上使用开关/案例。
您可以为每个滑块上的每个位置指定1到1000000000的不同二进制值,然后使用总和。
如果每个组合的动作是静态的,您可以构建一个二维数组:
var data = [
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
[21,22,23,24,25]
];
上面示例中的数字可以是任何内容,例如字符串,数组等。获取值现在是一个单行(假设滑块的值范围为[0,5]:
var info = data[firstSliderValue][secondSliderValue];
是的,但不是正常的方式。你必须使用switch作为闭包。
例如: -
function test(input1, input2) {
switch (true) {
case input1 > input2:
console.log(input1 + " is larger than " + input2);
break;
case input1 < input2:
console.log(input2 + " is larger than " + input1);
default:
console.log(input1 + " is equal to " + input2);
}
}
是的你也可以这样做:
switch (true) {
case (var1 === true && var2 === true) :
//do something
break;
case (var1 === false && var2 === false) :
//do something
break;
default:
}
这将始终执行开关,几乎就像if / else但看起来更干净。继续检查case表达式中的变量。
以上是关于给出一种较好的替换switch case的方法 除了map映射还有么的主要内容,如果未能解决你的问题,请参考以下文章