從多個方面詳細闡述數組合併去重

一、數組合併去重方法

數組合併去重是指將多個數組合併成一個新的數組,並保證其中的元素不重複。這種方法在很多語言中都有現成的函數實現,比如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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 16:07
下一篇 2024-12-22 16:07

相關推薦

  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • 從多個方面用法介紹yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授權過程中,需要進行確認和配置級別控制的全能編程開發工程師。 一、授權確…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字符串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • 從多個方面zmjui

    zmjui是一個輕量級的前端UI框架,它實現了豐富的UI組件和實用的JS插件,讓前端開發更加快速和高效。本文將從多個方面對zmjui做詳細闡述,幫助讀者深入了解zmjui,以便更好…

    編程 2025-04-28

發表回復

登錄後才能評論