2016-01-31 40 views
-1

所以我要合併在Java 2個二維陣列,例如:如何在Java中合併二維數組?

arr1 = {{id, first_name, last_name}, {1, denise, phillips}} 
arr2 = {{gender, ip_address}, {Female, 152.81.244.149}} 

它會加入這些併成爲:

arr3 = {{id, first_name, last_name, gender, ip_address}, {1, denise, phillips,Female, 152.81.244.149}} 
+1

什麼阻止你?編寫代碼時面臨什麼問題? – Pshemo

+0

我知道如何添加一個新的數組,但我不知道如何添加第二個。arraycopy在這裏不起作用,因爲我想合併兩個數組,並且不追加它們。 –

+0

這兩個數組的行數是否相等? – Pshemo

回答

2

你有

arr1 = {{id, first_name, last_name}, {1, denise, phillips}} 
arr2 = {{gender, ip_address}, {Female, 152.81.244.149}} 

int m = arr1[0].length; 
int n= arr2[0].lenght; 
String[][] arr3 = new string[2][m+n]; 

另一個二維數組來存儲他們兩個。

在這裏使用你的數據類型而不是'String'。我使用'字符串'只是爲了讓你的方式。

我們在arr3合併arr1arr2等作爲你的例子:

for(int j=0;j<2;j++) 
{ 
    for(int i=0;i<m+n;i++) 
    { 
     if(i<m) 
      arr3[i]=arr1[i]; 
     else 
      arr3[i]=arr2[i%m]; 
    } 
} 
2

循環執行System.arraycopy可以完成這項工作:

Object[][] arr1 = {{"id", "first_name", "last_name"}, {1, "denise", "phillips"}}; 
Object[][] arr2 = {{"gender", "ip_address"}, {"Female", "152.81.244.149"}}; 

Object[][] arr3 = new Object[2][]; 
for(int i = 0; i < arr3.length; i++) { 
    arr3[i] = new Object[arr1[i].length + arr2[i].length]; 
    System.arraycopy(arr1[i], 0, arr3[i], 0); 
    System.arraycopy(arr2[i], 0, arr3[i], arr1[i].length); 
} 

這是一種哈克和毛病 - 如果你有任何控制如何arr1arr2創建一個nd維持,你應該改變他們不必做這樣的事情,這是不能遠程擴展。

更好的方法是創建一個代表記錄的新類,而不是試圖混淆數組來表示複雜的類。

+0

我無法控制它們的管理方式。我從csv文件獲取數據並對其進行處理。 –

2

因爲我們知道,每個數字陣列中的行相同則意味着新的數組將包含的行相同。所以我們可以開始做類似

String[][] merged = new String[size][]; //where size is number of rows 

現在我們可以專注於用適當的行填充這個數組。要創建它們,我們需要

  • 迭代每對行,
  • 指望他們列,
  • 基於該計數創造新的排陣一樣String[] row = new String[count];
  • 填補了該行與數據兩行。

末點可以像

int counter = 0; 
for (int i=0; i<rowA.length; i++)//rowA represents row from first array 
    row[counter++]=rowA[i]; 
for (int i=0; i<rowB.length; i++)//rowB represents row from second array 
    row[counter++]=rowB[i]; 

達到現在只是把此行合併後的陣列狀

merged[rowNumber] = row; 
1

我設法得到它與這方面的工作,可能不是最好的解決方案。虐待其他人:

for (int i = 0; i < rows; i++) { 
    for (int j = 0; j < columnIndex - 1; j++) { 
     tmpTable[i][j] = tmpLeft[i][j]; 
    } 

    for (int k = columnIndex - 1; k < cols - 1; k++) { 
     tmpTable[i][k] = tmpRight[i][k - (columnIndex - 1)]; 
    } 
}