一、數組合併去重方法
數組合併去重是指將多個數組合併成一個新的數組,並保證其中的元素不重複。這種方法在很多語言中都有現成的函數實現,比如PHP中的array_merge()函數和array_unique()函數,JavaScript中的concat()方法和Set對象,等等。以下為PHP實現的例子:
$arr1 = array('a', 'b', 'c');
$arr2 = array('b', 'c', 'd');
$newArr = array_unique(array_merge($arr1, $arr2));
print_r($newArr); // 輸出:Array ( [0] => a [1] => b [2] => c [4] => d )
當然,在某些語言中可能沒有現成的函數實現,需要自行編寫算法來完成。下面介紹一種基於哈希表實現的算法:
function mergeUnique(arr1, arr2) {
var hash = {};
var result = [];
for (var i = 0; i < arr1.length; i++) {
if(!hash[arr1[i]]) {
hash[arr1[i]] = true;
result.push(arr1[i]);
}
}
for (var i = 0; i < arr2.length; i++) {
if(!hash[arr2[i]]) {
hash[arr2[i]] = true;
result.push(arr2[i]);
}
}
return result;
}
console.log(mergeUnique(['a', 'b', 'c'], ['b', 'c', 'd'])); // 輸出:["a", "b", "c", "d"]
二、兩個數組合併去重
有時候我們僅需要合併兩個數組,以下為常見的代碼實現:
$arr1 = array('a', 'b', 'c');
$arr2 = array('b', 'c', 'd');
$newArr = array_merge(array_diff($arr1, $arr2), array_diff($arr2, $arr1), array_intersect($arr1, $arr2));
print_r($newArr); // 輸出:Array ( [0] => a [1] => d )
以上代碼使用array_diff()函數獲取兩個數組的差集,用array_intersect()函數獲取交集,再將結果合併即可得到合併去重後的新數組。
三、數組合併去重並排序C語言
在C語言中,數組合併去重後需要排序,以下為代碼實現:
#include<stdio.h>
#include<stdlib.h>
#define N 10
void Sort(int *a, int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (*(a+j) > *(a+j+1))
{
temp = *(a+j);
*(a+j) = *(a+j+1);
*(a+j+1) = temp;
}
}
}
}
int MergeUnique(int *arr1, int n1, int *arr2, int n2, int *newArr)
{
int *p = newArr;
int *end = newArr;
int *temp = (int*)malloc(sizeof(int) * (n1 + n2));
int *i, *j;
for (i = arr1; i < arr1 + n1; i++)
{
for(j = arr2; j < arr2 + n2; j++)
{
if(*i == *j) break;
}
if(j == arr2 + n2)
{
*temp = *i;
temp++;
}
}
for (i = arr2; i < arr2 + n2; i++)
{
*temp = *i;
temp++;
}
temp = (int*)realloc(temp, (temp - newArr) * sizeof(int));
memcpy(newArr, newArr, (temp - newArr) * sizeof(int));
end = temp;
Sort(newArr, end - newArr);
return end - newArr;
}
int main()
{
int arr1[N] = {1,2,2,3,4,5,6,7,7,8};
int arr2[N] = {0,0,2,4,5,6,9,9,9,10};
int newArr[N];
int n = MergeUnique(arr1, 10, arr2, 10, newArr);
for(int i = 0; i < n; i++) printf("%d ", newArr[i]);
return 0;
}
四、c數組合併去重
除了C語言的方法外,還可以使用以下代碼實現:
#include<stdio.h>
int main()
{
int arr1[5] = {1,3,5,7,9};
int arr2[5] = {2,4,6,8,10};
int newArr[10], sum = 5;
for(int i = 0; i < 5; i++)
{
int j, k;
for(j = 0; j < sum; j++)
if(arr1[i] == newArr[j]) break;
if(j == sum) newArr[sum++] = arr1[i];
}
for(int i = 0; i < 5; i++)
{
int j, k;
for(j = 0; j < sum; j++)
if(arr2[i] == newArr[j]) break;
if(j == sum) newArr[sum++] = arr2[i];
}
for(int i = 0; i < sum; i++) printf("%d ", newArr[i]);
return 0;
}
五、js數組合併去重
JavaScript中的Set對象可以去除重複元素,以下為代碼實現:
let arr1 = [1, 2, 3];
let arr2 = [2, 3, 4];
let newArr = [...new Set([...arr1, ...arr2])];
console.log(newArr); // 輸出[1, 2, 3, 4]
六、php數組合併去重
PHP中的array_unique()函數可以去除重複元素,以下為代碼實現:
$arr1 = array('a', 'b', 'c');
$arr2 = array('b', 'c', 'd');
$newArr = array_unique(array_merge($arr1, $arr2));
print_r($newArr); // 輸出:Array ( [0] => a [1] => b [2] => c [4] => d )
七、數組對象去重方法
在處理對象數組時,需要注意對象屬性的比較,以下為常見的代碼實現:
let arr1 = [{id:1,name:'name1'},{id:2,name:'name2'},{id:3,name:'name3'}];
let arr2 = [{id:3,name:'name3'},{id:4,name:'name4'}];
let newArr = arr1.concat(arr2).reduce((prev, cur) => {
let flag = prev.every(item => item.id !== cur.id);
if (flag) prev.push(cur);
return prev;
}, []);
console.log(newArr); // 輸出:[{id:1,name:'name1'},{id:2,name:'name2'},{id:3,name:'name3'},{id:4,name:'name4'}]
八、兩組數據合併去重
當處理不同格式的數據合併時,可以使用以下代碼實現:
let arr1 = ['a', 'b', 'c'];
let arr2 = [{id:1, name:'name1'},{id:2, name:'name2'}];
let newArr = [...new Set([...arr1, ...arr2.map(item => item.name)])];
console.log(newArr); // 輸出:["a", "b", "c", "name1", "name2"]
九、前端兩個數組合併成一個
在前端開發中,經常需要將多個數組合併成一個數組,以下為代碼實現:
let arr1 = ['a', 'b', 'c'];
let arr2 = ['b','c','d'];
let newArr = [...arr1, ...arr2];
console.log(newArr); // 輸出:["a", "b", "c", "b", "c", "d"]
以上就是關於數組合併去重的多個方面的詳細闡述,包括方法實現、排序、對象數組去重、多類型數據合併去重、前端數組合併等方面的內容,希望對您有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/286159.html