2014-01-26 27 views
0

我有一個這樣的陣列:
雙[] my_input_array = {0,1,2,3,4,5,6,7,8};
和一些已知的位置,它們表示從陣列中移除項目的位置。
例如,如果職位是3和7我想獲得一個my_output_array = {0,1,2,4,5,6,8};從數組中刪除一些項和收縮陣列中的Java

所以我想有這樣的函數:

public double[] getShinkedArray(double[] my_input_array, int... positions){ 
    /* SOME CODE */ 
    return my_output_array; 
} 

我注意到這個問題Delete item from array and shrink array但這些答案的時間從一個數組中刪除只有一個元素。

+0

刪除多個元素基本上是相同的,除非您多次執行或檢查位置數組。你有什麼問題? –

回答

2

您不能縮小數組,您需要用新大小創建一個新數組。你可以這樣做:

public double[] getShinkedArray(final double[] my_input_array, final int... positions) { 
    double[] outputArray = new double[my_input_array.length - positions.length]; 
    for (int i = 0, j = 0; i < my_input_array.length; i++) { 
     if (Arrays.binarySearch(positions, i) < 0) { 
      outputArray[j++] = my_input_array[i]; 
     } 
    } 
    return outputArray; 
} 
+2

+1這裏假設所有的職位都是按排序順序排列的,現在的和唯一的。 –

0

創建一個新數組,循環遍歷舊數組,循環的每個步驟檢查循環索引是否存在於positions中。如果是,則轉到循環的下一個迭代。如果不是,則將舊數組中該索引處的元素添加到新數組中。返回新的數組。