[英]Why is the array_unique version faster
我正在與一位速度更快的同事討論,我們做了一個小基准:
function uniqueByKey(){
$strings = [];
$stopwatch->start('test');
for ($i = 1; $i <= 1000000; $i++) {
$strings[RandomStringUtil::generate()] = 1;
}
$outcome = $stopwatch->stop('test');
die($outcome->getDuration()/1000);
self::assertSame(25, count($strings));
}
和
function uniqueByFunction(){
$strings = [];
$stopwatch->start('test');
for ($i = 1; $i <= 1000000; $i++) {
$strings[] = RandomStringUtil::generate();
}
$strings = array_unique($strings);
$outcome = $stopwatch->stop('test');
die($outcome->getDuration()/1000);
self::assertSame(25, count($strings));
}
我期待方法uniqueByKey
更快,因為通過鍵訪問數組非常快,並且唯一的數組現在有 1.000.000 個值來檢查唯一性。
然而, uniqueByKey
(平均運行幾次)持續約 12.5 秒,而uniqueByFunction
僅約 11.8 秒。
在我們的用例中,我們只循環了 25 倍,所以差異並不值得注意,但是我們很好奇為什么后者比第一個更快。 誰能解釋一下?
如果重要,請在 MacbookPro 2020 版上測試)
我試試這個:
$base = [];
for ($i = 0; $i < 1000000; $i++) {
$base[] = md5($i);
}
$start = microtime(true);
$array1 = [];
foreach ($base as $random) {
$array1[$random] = 1;
}
$end = microtime(true);
echo $end - $start . PHP_EOL;
$start = microtime(true);
$array2 = [];
foreach ($base as $random) {
$array2[] = $random;
}
$array2 = array_unique($array2);
$end = microtime(true);
echo $end - $start . PHP_EOL;
我得到了和你一樣的結果,但如果我試試這個:
$base = [];
for ($i = 0; $i < 1000000; $i++) {
$base[] = md5($i);
$base[] = md5($i);
$base[] = md5($i);
}
$start = microtime(true);
$array1 = [];
foreach ($base as $random) {
$array1[$random] = 1;
}
$end = microtime(true);
echo $end - $start . PHP_EOL;
$start = microtime(true);
$array2 = [];
foreach ($base as $random) {
$array2[] = $random;
}
$array2 = array_unique($array2);
$end = microtime(true);
echo $end - $start . PHP_EOL;
我得到了相反的結果。 array_unique
並不總是更快
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.