我想知道javascript中以下条件结构的实现的性能.
方法1:
if(id==="camelCase"){
window.location.href = "http://www.thecamelcase.com";
}else if (id==="jsFiddle"){
window.location.href = "http://jsfiddle.net/";
}else if (id==="cricInfo"){
window.location.href = "http://cricinfo.com/";
}else if (id==="apple"){
window.location.href = "http://apple.com/";
}else if (id==="yahoo"){
window.location.href = "http://yahoo.com/";
}
Run Code Online (Sandbox Code Playgroud)
方法2:
switch (id) {
case 'camelCase':
window.location.href = "http://www.thecamelcase.com";
break;
case 'jsFiddle':
window.location.href = "http://www.jsfiddle.net";
break;
case 'cricInfo':
window.location.href = "http://www.cricinfo.com";
break;
case 'apple':
window.location.href = "http://www.apple.com";
break;
case 'yahoo':
window.location.href = "http://www.yahoo.com";
break;
}
Run Code Online (Sandbox Code Playgroud)
方法3
var hrefMap = {
camelCase : "http://www.thecamelcase.com",
jsFiddle: "http://www.jsfiddle.net",
cricInfo: "http://www.cricinfo.com",
apple: "http://www.apple.com", …Run Code Online (Sandbox Code Playgroud) 有一个像这样的代码:
switch (indexPath.section, indexPath.row) {
case (0, 1...5): println("in range")
default: println("not at all")
}
Run Code Online (Sandbox Code Playgroud)
问题是我可以在第二元组值中使用多个区间吗?
对于非元组切换,它可以很容易地完成
switch indexPath.section {
case 0:
switch indexPath.row {
case 1...5, 8...10, 30...33: println("in range")
default: println("not at all")
}
default: println("wrong section \(indexPath.section)")
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个分隔符来分隔元组内部的间隔,或者它不适用于元组开关,我必须在开关内使用开关?谢谢!
我一直想知道这件事已经有一段时间了.我到目前为止还不是一个核心程序员,主要是小型Python脚本,我写了几个分子动力学模拟.对于真正的问题:switch语句有什么意义?你为什么不能只使用if-else语句?
感谢您的回答,如果之前有人询问过,请指向我的链接.
编辑
S.Lott指出,这可能是问题If/Else vs. Switch的重复.如果你想关闭然后这样做.我将把它留待进一步讨论.
这个问题主要针对C/C++,但我猜其他语言也是相关的.
我无法理解为什么仍然使用switch/case而不是if/else if.在我看来,很像使用goto,并导致相同类型的混乱代码,而相同的结果可以使用if/else,如果是更有条理的方式.
不过,我经常看到这些块.找到它们的一个常见位置是在消息循环(WndProc ...)附近,而这些是它们引发最严重破坏的地方之一:变量在整个块中共享,即使不是主要的(也不是在里面初始化).必须特别注意不要放弃休息,等等......
就个人而言,我避免使用它们,我想知道我错过了什么?
它们比if/else更有效吗?它们是否继承传统?
可能重复:
C# - "开启类型"有比这更好的选择吗?
你好假设我在类类型上得到一个很大的if/else.有没有办法用开关盒做到这一点?
示例:
function test(object obj)
{
if(obj is WebControl)
{
}else if(obj is TextBox)
{
}
else if(obj is ComboBox)
{
}
Run Code Online (Sandbox Code Playgroud)
等......
我想创造类似的东西
switch(obj)
{
case is TextBox:
break;
case is ComboBox:
break;
}
Run Code Online (Sandbox Code Playgroud)
}
有没有办法将两个不同的大小写值分配给同一个代码块而无需复制和粘贴?例如,低于68和40应执行相同的代码,而30则不相关.
case 68:
//Do something
break;
case 40:
//Do the same thing
break;
case 30:
//Do something different
break;
Run Code Online (Sandbox Code Playgroud)
认为这样的事情应该有效是不正确的(即使它显然没有)?
case 68 || 40:
//Do something
break;
case 30:
//Do something else
break;
Run Code Online (Sandbox Code Playgroud) Java编译器通常使用String对象生成比使用链式if-then-else语句更高效的字节码.
AFAIK even String in switch在.equals()内部以区分大小写的方式使用.那么它们在这种背景下的效率是多少.编译速度更快?字节码少?更好的性能?
可能重复:
"else if"比"switch()case"快吗?
Java中if/else与switch的相对性能是什么?
我已经在运行中进行编码....当调试器逐步执行case语句时,它会立即跳转到与条件匹配的项,但是当使用if/else指定相同的逻辑时,它会逐步执行每个if语句直到它找到胜利者.case语句是否更有效,或者我的调试器只是优化了一步?(不要担心语法/错误,我在SO中键入它,不知道它是否会编译,它的原理我之后,我不想做它们作为int因为我依稀记得一些关于使用带有整数的偏移的情况)我使用C#,但我对编程语言的一般答案感兴趣.
switch(myObject.GetType()){
case typeof(Car):
//do something
break;
case typeof(Bike):
//do something
break;
case typeof(Unicycle):
//do something
break;
case default:
break;
}
Run Code Online (Sandbox Code Playgroud)
VS
Type myType = myObject.GetType();
if (myType == typeof(Car)){
//do something
}
else if (myType == typeof(Bike)){
//do something
}
else if (myType == typeof(Unicycle)){
//do something
}
else{
}
Run Code Online (Sandbox Code Playgroud) 这是一个演示查询,请注意它非常简单,仅在base_price为0的情况下获取,而且,它仍然选择条件3:
SELECT
CASE course_enrollment_settings.base_price
WHEN course_enrollment_settings.base_price = 0 THEN 1
WHEN course_enrollment_settings.base_price<101 THEN 2
WHEN course_enrollment_settings.base_price>100 AND
course_enrollment_settings.base_price<201 THEN 3
ELSE 6
END AS 'calc_base_price',
course_enrollment_settings.base_price
FROM
course_enrollment_settings
WHERE course_enrollment_settings.base_price = 0
Run Code Online (Sandbox Code Playgroud)
base_price 是 decimal(8,0)
在我的数据库上运行时,我得到:
3 0
3 0
3 0
3 0
3 0
switch-statement ×10
if-statement ×4
javascript ×2
.net ×1
c ×1
c# ×1
c++ ×1
case ×1
conditional ×1
ios ×1
java ×1
mysql ×1
optimization ×1
performance ×1
ruby ×1
sql ×1
string ×1
swift ×1
tuples ×1
xcode6 ×1