-3

我要比较一个值,如果值小于等于3,则做某事,如果值介于4和27之间,则做其他事情,但如果值大于28,则做其他事情,有没有优雅不消耗大量资源的方式,我可以避免使用 switch of if?? 我必须比较大约 60k+ 的值。

4

4 回答 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 回答