在C#中使用switch语句与使用语句的好处/缺点是什么?if/else我无法想象除了你的代码外观之外还有其他重大差异.
是否有任何理由导致生成的IL或相关的运行时性能完全不同?
我在java中发现很多书说switch语句比if语句更快.但我没有找到说明为什么开关比如果更快的地方.
我有一种情况我必须选择两个中的任何一项我可以使用以下任一方式
switch(item){
case BREAD:
//eat Bread
break;
default:
//leave the restaurant
}
Run Code Online (Sandbox Code Playgroud)
或使用if语句如下
if(item== BREAD){
//eat Bread
}else{
//leave the restaurant
}
Run Code Online (Sandbox Code Playgroud)
考虑项目和BREAD是常量int值
在上面的例子中,哪个更快,为什么?
可能重复:
"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) 2009-12-04更新:有关在此处发布的一些建议的分析结果,请参阅下文!
考虑以下非常无害,非常简单的方法,它使用switch语句返回定义的枚举值:
public static MarketDataExchange GetMarketDataExchange(string ActivCode) {
if (ActivCode == null) return MarketDataExchange.NONE;
switch (ActivCode) {
case "": return MarketDataExchange.NBBO;
case "A": return MarketDataExchange.AMEX;
case "B": return MarketDataExchange.BSE;
case "BT": return MarketDataExchange.BATS;
case "C": return MarketDataExchange.NSE;
case "MW": return MarketDataExchange.CHX;
case "N": return MarketDataExchange.NYSE;
case "PA": return MarketDataExchange.ARCA;
case "Q": return MarketDataExchange.NASDAQ;
case "QD": return MarketDataExchange.NASDAQ_ADF;
case "W": return MarketDataExchange.CBOE;
case "X": return MarketDataExchange.PHLX;
case "Y": return MarketDataExchange.DIRECTEDGE;
}
return MarketDataExchange.NONE;
}
Run Code Online (Sandbox Code Playgroud)
我和我的同事今天就如何更快地实现这个方法的几个想法进行了斗争,并且我们想出了一些有趣的修改,实际上相当显着地提高了它的性能(当然,按比例说).我有兴趣知道那里的其他人可以想到哪种优化可能没有发生在我们身上.
接下来,让我简单地提供一个快速免责声明:这是为了好玩 …
我处于两难境地.哪个最好用,为什么..切换或如果?
switch ($x)
{
case 1:
//mysql query
//echo something
break;
case 2:
//mysql query
//echo something
break;
}
Run Code Online (Sandbox Code Playgroud)
...
if ($x == 1) {
//mysql query
//echo something
}
if ($x == 2) {
//mysql query
//echo something
}
Run Code Online (Sandbox Code Playgroud) 我最近遇到很多情况,我的条件非常简单,需要分支应用程序流程.完成我正在做的事情的"最简单"的方法只是一个简单的陈述if/ elseif声明:
if($value == "foo") {
// ...
} elseif($value == "bar") {
// ...
} elseif($value == "asdf" || $value == "qwerty") {
// ...
}
Run Code Online (Sandbox Code Playgroud)
......但我也在考虑这样的事情:
switch($value) {
case "foo":
// ...
break;
case "bar":
// ...
break;
case "qwer":
case "asdf":
// ...
}
Run Code Online (Sandbox Code Playgroud)
这似乎有点不太可读,但也许它的性能更高?但是,当条件中有越来越多的"或"表达式时,似乎switch语句更具可读性和实用性:
switch($value) {
case "foo":
// ...
break;
case "bar":
case "baz":
case "sup":
// ...
break;
case "abc":
case "def":
case "ghi":
// ...
break;
case …Run Code Online (Sandbox Code Playgroud) 可能重复:
"else if"是否比"switch()case"更快?
Java中if/else与switch语句的相对性能差异是什么?
我知道case语句可以用跳转表来实现.这是否比if语句更有效?
这只是应该避免的微观优化吗?
如果我有一个具有大量条件的功能,那么组织它的最佳方法是什么?
我担心的是其他人进入代码并了解正在发生的事情.即使示例很简单,也可以想象条件非常复杂.
举个例子:
public void function(string value, string value2)
{
if (value == null)
return;
if (value2 == value)
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
要么
public void function(string value, string value2)
{
if (value != null)
{
if (value2 == value)
DoSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public void function(string value, string value2)
{
if (value != null && value2 == value)
DoSomething();
}
Run Code Online (Sandbox Code Playgroud) 我目前正在学习Java,我遇到了if-elseandswitch语句,并且我了解到Switch 语句比 if-else 语句稍快。
我很熟悉,每当我们创建一些东西(定义函数和东西)时,Python 就会添加很多样板文件,这些样板文件可以通过使用dis函数反汇编它们来看到。
match语句比if-elsePython更快吗?使用它来代替传统的if-else语句是不是更有效率?
如果您不熟悉语句,请参阅PEP 636 - 结构模式匹配match教程的链接。
对于以下代码,
If Sheets("sheet1").Range("A1").Value = "option_1" Then
Sheets("sheet1").Range("A1").Value = "option_2"
ElseIf Sheets("sheet1").Range("A1").Value = "option_2" Then
Sheets("sheet1").Range("A1").Value = "option_3"
ElseIf Sheets("sheet1").Range("A1").Value = "option_3" Then
Sheets("sheet1").Range("A1").Value = "option_4"
...
End IF
Run Code Online (Sandbox Code Playgroud)
和
Select Case Sheets("sheet1").Range("A1").Value
Case Is = "option_1"
Sheets("sheet1").Range("A1").Value = "option_2"
Case Is = "option_2"
Sheets("sheet1").Range("A1").Value = "option_3"
Case Is = "option_3"
Sheets("sheet1").Range("A1").Value = "option_4"
...
End Select
Run Code Online (Sandbox Code Playgroud)
问题:
1)我想知道哪条路会更快.如果可能的话,技术细节可以解释一下吗?
2)无论效率如何,在这种情况下我应该使用哪种方法,以获得更好的编码.
3)从数组中圈出值的任何其他"简单"方法?
if-statement ×4
c# ×2
java ×2
performance ×2
php ×2
.net ×1
branch ×1
coding-style ×1
conditional ×1
excel ×1
excel-vba ×1
optimization ×1
python ×1
python-3.x ×1
vba ×1