我必须比较一个值,如果该值小于或等于3,则执行某些操作,如果值在4和27之间,则执行其他操作,但如果值大于28则执行其他操作,是有任何优雅的方式,不消耗大量的资源,我可以避免使用if的开关?我必须比较大约60k +值。
答案 0 :(得分:3)
我认为没有更快的事情。如果您知道数据的分布方式,您可以加快速度。例如,如果大多数值大于27,则首先检查该条件,等等。如果您的数据已排序,您还可以找到一种方法来利用它。
答案 1 :(得分:1)
使用quicksort对值进行排序。此实现将减少if比较的数量,但可能不会更快。
答案 2 :(得分:1)
我给这样一张支票定时:
if (i <= 3) {
DoSomething();
} else if (i <= 27) {
DoSomethingElse();
} else {
DoSomethingElse();
}
在我的计算机上执行此操作60000次大约需要35微秒。如果这对你所做的事情来说太长了,你必须重新思考你在做什么,而不是尝试不同的方式。
答案 3 :(得分:1)
您可以使用Conditional运算符(?:
)并执行以下操作:
i = (i <= 3) ? DoSomething() : (i <= 27) ? DoSomething(): DoSomething();
这只是更精简,在我的计算机上需要571400纳秒(6gb ram),而if..else
语句需要407400纳秒,因此if..else
语句更快,但条件运算符更精简