⚡性能解决方案⚡
如果您关心性能和微优化,请检查以下一线:
function no_dupes(array $input_array) {
return count($input_array) === count(array_flip($input_array));
}
描述:
函数将数组元素$input_array
与array_flip中的元素进行比较。值变成键并猜测-键在关联数组中必须是唯一的,因此不会丢失唯一值,并且元素的最终数量要少于原始值。
如手动数组键中所述,只能是int
或的类型,string
这就是原始数组值中可以比较的类型,否则PHP将开始强制转换并产生意外结果。
1000万记录阵列的证明
- 投票最多的解决方案:14.187316179276s🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌
- 接受的解决方案:2.0736091136932s🐌🐌
- 本答案解决方案:0.14155888557434s🐌/ 10
测试用例:
<?php
$elements = array_merge(range(1,10000000),[1]);
$time = microtime(true);
accepted_solution($elements);
echo 'Accepted solution: ', (microtime(true) - $time), 's', PHP_EOL;
$time = microtime(true);
most_voted_solution($elements);
echo 'Most voted solution: ', (microtime(true) - $time), 's', PHP_EOL;
$time = microtime(true);
this_answer_solution($elements);
echo 'This answer solution: ', (microtime(true) - $time), 's', PHP_EOL;
function accepted_solution($array){
$dupe_array = array();
foreach($array as $val){
if(!isset($dupe_array[$val])){$dupe_array[$val]=0;}
if(++$dupe_array[$val] > 1){
return true;
}
}
return false;
}
function most_voted_solution($array) {
return count($array) !== count(array_unique($array));
}
function this_answer_solution(array $input_array) {
return count($input_array) === count(array_flip($input_array));
}
请注意,当在巨大数组的开头附近没有唯一值时,在某些情况下可接受的解决方案可能会更快。