代码
if ([@[@1,@2,@3] containsObject:@(section)]) {
return 10;
}else if ([@[@0,@4] containsObject:@(section)]) {
return 15;
}else {
return 0;
}
&安培;&安培;
switch (section) {
case 0:
return 15;
case 1:
return 10;
case 2:
return 10;
case 3:
return 10;
case 4:
return 15;
default:
break;
}
return 0;
我想知道哪种方式更好(代码行,运行效率......)
我喜欢swift的转换案例......
答案 0 :(得分:6)
Switch case总是更好,效率最高,因为所有条件都是在编译时静态分配的,并且不需要运行时计算。
为了使代码清晰,您也可以
switch (section) {
case 0:
case 4:
return 15;
case 1:
case 2:
case 3:
return 10;
default:
return 0;
break;
}
答案 1 :(得分:1)
我倾向于在可以的时候使用开关。速度优化可以是真实的,但对于小型测试我真的不重要。在我看来,真正的优势在于切换必须是详尽无遗的:您必须使用default:
catch来处理所有可能的值。
此外,使用Swift可以大大提高切换可读性,因为您不必添加break
语句以避免在下一种情况下崩溃,并且您可以将条件分组到同一行:
switch (section) {
case 0, 4:
return 15
case 1...3:
return 10
default:
return 0
}
答案 2 :(得分:1)
切换更好,并使用@MichaëlAzevedo提到的用例范围
当编译器命中switch语句时,它会创建一个包含所有可能条件的查找表。在if-else类型的验证中,编译器必须在每次进入if时评估条件,否则if,else ..
答案 3 :(得分:0)
使用开关/外壳。更清楚的是你在做什么,这使代码更具可读性。此外,您总是会捕获默认情况,从而产生确定性算法。
答案 4 :(得分:0)
switch case更好,因为它的可读性,并且你在编译时创建了一种查找表,在switch case中。所以不需要计算和计算。
答案 5 :(得分:0)
似乎编译器在优化switch语句方面优于if语句。
编译器不知道评估if语句的顺序对您是否重要,并且不能在那里执行任何优化。您可以在if语句中调用方法,从而影响变量。使用switch语句,它知道所有子句可以同时进行评估,并且可以按照最有效的顺序放置它们。