我有一个这样的数组:
double [] my_input_array = {0,1,2,3,4,5,6,7,8};
以及一些已知的位置,表示从阵列中删除项目的位置
例如,如果位置是3和7,我想获得 my_output_array = {0,1,2,4,5,6,8};
所以我希望有这样的功能:
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;
}
答案 1 :(得分:0)
创建一个新数组,循环遍历旧数组,循环的每一步检查positions
中是否存在循环索引。如果是,请转到循环的下一次迭代。如果不是,请将旧数组中该索引处的元素添加到新数组中。返回新阵列。