0

我有一个这样的数组:
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但这些答案一次只从数组中删除一个元素。

4

2 回答 2

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;
}
于 2014-01-26T15:41:06.920 回答
0

创建一个新数组,遍历旧数组,为循环的每一步检查循环索引是否存在于positions. 如果是,则转到循环的下一个迭代。如果不是,则将旧数组中该索引处的元素添加到新数组中。返回新数组。

于 2014-01-26T15:40:54.103 回答