哪种方法更快?

Posted

技术标签:

【中文标题】哪种方法更快?【英文标题】:Which method is faster? 【发布时间】:2012-03-07 03:59:37 【问题描述】:

我有一个用作简单数据库的文本文件,每个条目跨越两行,如下所示:

name
number
bob
39
jack
22
jill
85

现在假设我将每一行分隔在一个数组中,我想分析每个 NAME 并查看它是否等于一个变量。这样做会更快吗:

if($variable == $line) 
    //true

还是先过滤掉偶数行(名称),然后分析它们是否等于变量?如果你不知道,下面的第一行基本上是找到计数的余数(这都是在一个 foreach 循环中)除以 2,如果等于 0 则为偶数。

if ($count%2 == 0) 
    if($variable == $line) 
        //true
    

谢谢。

【问题讨论】:

为什么要经历得到偶数的麻烦?这样做的目的是什么?直接找到他们! 【参考方案1】:

根据“某些”情况,我肯定会选择第一种风格。例如,您认为您的平等操作需要多长时间?在我看到比较整数或双精度的情况下,第一种风格对我个人来说似乎要好得多。

在我的书中,模运算符是一项昂贵的操作。如果您有一个庞大的数据库,则进行模运算将花费大量时间。您可以尝试使用其他方法使其更快Reference 类似这样的方法。

我希望你对上面的代码做一个时间研究,看看你自己的时间差异。当我对大约 500 万个数据集使用模运算时,我遇到了一些与时间相关的主要问题。

根据其中一个答案进行编辑。

一定要使用已经提供的 +=2 运算,而不是模数以及第一种情况。

【讨论】:

【参考方案2】:

第二个要快得多。对于这样的处理,假设计算时间可以忽略不计,而试验次数会更大地影响您的速度。在程序效率方面,几乎总是如此。尤其是与简单的检查相比,例如两个 if 语句对一个。

【讨论】:

【参考方案3】:

if 语句组合到第二个语句中以加快速度。

if($count%2==0 && $variable==$line) 

【讨论】:

我认为解释器已经采取了这种优化(在低级代码中)。 我不确定是否。但如果没有,那么它会加快速度。【参考方案4】:

我假设你有一个类似的数组

$lines = array('bob', '39', 'jack', '22', 'jill', '85');

然后只需跳过 for 循环中的奇数行:

for ($i=0, $len=count($lines); $i<$len; $i+=2) 
   if ($lines[$i] == $var) 
       // true
   

【讨论】:

以上是关于哪种方法更快?的主要内容,如果未能解决你的问题,请参考以下文章

哪种方法更快?

哪种检查 NSDictionary 是不是包含特定键的方法更快?

ADO.NET 性能:哪种方法会更快、更合理? [关闭]

哪种方法更快,表示:服务器端渲染与客户端渲染

哪种方式更快? [关闭]

哪种方法可以更快地使用 PHP/Laravel 从 MySQL/MariaDB 获取所有 POI