2016-02-05 77 views
1

我有一個6行2列的2維數組,我想根據第一列中的值對第二列中的值進行求和。我不知道下一步要將保存的值傳輸到sortedArray中。在第一列中添加第二列中包含重複元素

Basicaly我想改變這一點:

 { 1, 5}, 
     { 1, 10 }, 
     { 2, 5}, 
     { 2, 15}, 
     { 2, 10}, 
     { 3, 6}, 

到這一點:

 { 1, 15}, 
     { 2, 30}, 
     { 3, 6}, 

這是到目前爲止我的代碼,所以任何幫助,將不勝感激。

int [][] sortedArray = new int[3][2]; 
    int [][] array = { 
     { 1, 5}, 
     { 1, 10 }, 
     { 2, 5}, 
     { 2, 15}, 
     { 2, 10}, 
     { 3, 6}, 
     }; 
    int column1 = 0; 
    int column2 = 0; 

    for(int i = 0; i < array.length; i++) 
    { 
    array[i][0] = column1; 
    while(array[i][0] == column1) 
    { 
     column2 += array[i][1]; 
    } 
    } 
+0

你應該編輯你的問題來說明你的代碼,因爲它與你想要的相反。 –

+0

和你現在的代碼是什麼? – innoSPG

回答

0

如果您不知道第一列中唯一值的數量,您應該使用通用方法。

// Build a map with 
    final Map<Integer, Integer> sortedMap = new LinkedHashMap<>(); 
    for (int[] ints : array) { 
     if (sortedMap.containsKey(ints[0])) { 
      sortedMap.put(ints[0], sortedMap.get(ints[0]) + ints[1]); 
     } else { 
      sortedMap.put(ints[0], ints[1]); 
     } 
    } 
    int[][] sortedArray = new int[sortedMap.size()][2]; 
    int i = 0; 
    // Convert the map to 2D array 
    for (Integer integer : sortedMap.keySet()) { 
     sortedArray[i][0] = integer; 
     sortedArray[i][1] = sortedMap.get(integer); 
     i++; 
    } 
0

你可以嘗試這樣的:

for (int i=0; i<array.length; i++) // Iterate over each item in your array 
{ 
    // Process each item in your array into your sorted array. 
    for (int j=0; j<sortedArray.length; j++) 
    { 
     if (sortedArray[j][0] == array[i][0]) { 
      // If the value has already been seen, sum with existing. 
      sortedArray[j][1] += array[j][1]; 
     } else { 
      // If the value has not yet been seen, insert. 
      sortedArray[j][0] = array[i][0]; 
      sortedArray[j][1] = array[i][1]; 
     } 
    } 
} 

這是假設在array第一列中的值總是增加(根據你的例子)。它還假定在sortedArray中有足夠的空間,即。它的行數與第一列array中的不同值一樣多。

相關問題