2016-02-05 75 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中的不同值一样多。

相关问题