关于if与switch效率优化的说明
一、关于效率:同等情况下,用switch的效率要比if高很多,因为switch有一个索引跳转的过程,效率对比请参考这2篇博文:
博文1:http://blog.csdn.net/ahhsxy/article/details/6598587
博文2:http://www.liangshunet.com/ca/201303/886427761.htm
二、关于优化,再引入一个概念:
程序的圈复杂度是指的执行路径的数量,计算方法:
1.从1开始,一直往下通过程序。
2.加1:遇到if,for,while,and,or,else时加1
3.case每种情况加1,程序越低复杂度越好,低:1-4,中:5-7,高:8-10-更多。比如,下面2个的圈复杂度是相同的。都是2
//题目:输入一个数字,如果大于0则加一,小于0就减一然后输出
int[] values = {30,-5,90,100,0,-9 };
for (int i = 0; i < values.Length; i++)
{ //方法一:用switch代替if;
bool j = values[i] < 0;
switch (j)
{
case true: values[i]--; break;
case false: if(values[i]!=0){values[i]++;} break;
}
//方法二:用if
//if (values[i] < 0)
//{
// values[i]--;
//}
//if (values[i] > 0)
//{
// values[i]++;
//}
}
for (int i = 0; i < values.Length; i++)
{
Console.WriteLine(values[i]);
}
Console.ReadKey();
总结:只是列举了一种效率优化的方式,起抛砖引玉的作用吧。if和switch既然效率绝大多数差距很大,我们在更多时候,可以养成直接用switch考虑问题,舍弃if的思维。
其实说白了switch比较高级,同样圈复杂度的情况下,我们思考的多了,计算机需要思考的就少,反之依然,为了效率优化,为什么不用switch呢?