假設我有n個元素(數字或單詞)的數組,我想要查找數組中出現多次的所有元素。在性能方面做什麼最有效的方法是什麼?如何在數組中找到重複元素?
PS:我可以先排序數組,但只有在不影響整體性能的情況下。 此外,雖然這主要是PHP,我想知道一個算法或邏輯,也可以在其他平臺上實現。
假設我有n個元素(數字或單詞)的數組,我想要查找數組中出現多次的所有元素。在性能方面做什麼最有效的方法是什麼?如何在數組中找到重複元素?
PS:我可以先排序數組,但只有在不影響整體性能的情況下。 此外,雖然這主要是PHP,我想知道一個算法或邏輯,也可以在其他平臺上實現。
您可以使用array_count_values和array_filter
$array = array(1, "hello", 1, "world", "hello");
$new=array_filter(array_count_values($array),'custom_filter');
print_r($new);
function custom_filter($val)
{
return $val > 1;
}
輸出
Array
(
[1] => 2
[hello] => 2
)
$lookup = array();
foreach($array as $v) {
if (!isset($lookup[$v]))
$lookup[$v] = false;
else if ($lookup[$v] == false) {
echo "Duplicate $v\n";
$lookup[$v] = true;
}
}
希望這將工作
array_unique(array_diff($inputArray, array_unique($inputArray)));
愛到代碼在Oneline: ) – Sreeraj
有提供一個array_count_values()功能PHP本身。
它確實比你需要更多的,但應該是比較快的,因爲它是編譯的..
然後,當然,你需要過濾出來的結果爲功能按鍵值是> 1
編輯
如果你想要一個班輪:
$a = array('a','b','c','a','a','b','d','e');
array_keys(array_filter(array_count_values($a), create_function('$x', 'return $x>1;')));
// array (0 => 'a', 1 => 'b');
是第一排數組的選項? – jBit
性能取決於陣列的長度,也可能取決於重複的頻率。 –
[Couting發生數組中每個值的重複]的可能的重複(http://stackoverflow.com/questions/4872835/couting-occurances-of-each-value-in-an-array) – Gordon