我要比较一个值,如果值小于等于3,则做某事,如果值介于4和27之间,则做其他事情,但如果值大于28,则做其他事情,有没有优雅不消耗大量资源的方式,我可以避免使用 switch of if?? 我必须比较大约 60k+ 的值。
问问题
105 次
4 回答
3
我不认为有什么更快。如果您知道您的数据是如何分布的,您也许可以加快速度。例如,如果大多数值都高于 27,则首先检查该条件,等等。如果您的数据已排序,您还可以找到一种方法来利用它。
于 2012-10-07T22:15:51.327 回答
1
使用快速排序对值进行排序。此实现将减少 if 比较的数量,但可能不会更快。
于 2012-10-07T22:18:52.683 回答
1
我计时了这样的检查:
if (i <= 3) {
DoSomething();
} else if (i <= 27) {
DoSomethingElse();
} else {
DoSomethingElse();
}
在我的计算机上执行 60000 次大约需要 35 微秒。如果这对你正在做的事情来说太长了,你必须重新考虑你在做什么,而不是尝试一种不同的方式来做这件事。
于 2012-10-07T22:27:03.803 回答
1
您可以使用条件运算符 ( ?:
) 并执行以下操作:
i = (i <= 3) ? DoSomething() : (i <= 27) ? DoSomething(): DoSomething();
那只是更简洁,在我的计算机(6gb ram)上需要 571400 纳秒,而if..else
语句需要 407400 纳秒,所以if..else
语句更快,但条件运算符更简洁。
于 2012-10-07T22:48:20.823 回答