java - 从Java中的多维数组中删除项目

标签 java arrays list

我正在尝试从 3 维数组中删除项目。

我知道最好的方法之一是将数组转换为列表,并在遍历原始数组的同时从列表中删除这些项目,然后将列表转换回数组并返回它。

我试过了,但返回数组时出现类型不匹配。我怀疑在从数组转换为列表时我没有对维度做任何事情。

建议?

import java.util.List;
import java.util.Arrays;

public class RepatitionRemoval {
    public float[][][] process(float[][][] data) {
        //this method with step through all of the the strokes and remove
        //points which occupy the same position. This should help with time
        //warping regconition

        //Change the array to a list
        List points = Arrays.asList(data);

        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                for (int k = 0; k < data[i][j].length-1; k++) {
                    //if the current coordinate is the same as the one next
                    //then remove it
                    if (data[i][j][k] == data[i][j][k+1]) {
                         points.remove(data[i][j][k]);
                    }

                }
            }
         }

         float[][][] returnData = points.toArray();

         return returnData;
    }
}

最佳答案

首先,下面的方法并没有像你想的那样:

//Change the array to a list
List points = Arrays.asList(data);

顺便说一下,一个好的 IDE 会自动为您将其转换为:

List<float[][]> points = Arrays.asList(data);

因此,当您接下来执行以下操作时:

points.remove(data[i][j][k])

发生的事情是 data[i][j][k] 原语被自动装箱到 Float 包装类,然后是 remove 方法检查它是否包含任何等于包装的 Float 的元素。它检查了整个列表,但没有找到任何 Float,因为...您有一个 float[][] 的列表。所以基本上你的代码永远不会从列表中删除任何元素。

但是无论如何,您应该知道应该您找到一个与remove 方法匹配的元素,您将得到一个UnsupportedOperationException因为 Arrays.asList 只是包装了您的数组,而您的“列表”仍然支持 float[][][] 数组。而且您不能调整数组的大小。

然后,无论如何,您通常不能使用 == 比较 float :

if (data[i][j][k] == data[i][j][k+1]) {

因为它通常是检查两个 float 是否相等的糟糕方法。应使用 epsilon 比较 float (并且您应始终跟踪错误传播)。

关于您的最后一行,您可以转换回 float[][][] 但它毫无意义,因为您创建的 float[][] 列表第一个由您的原始 float[][][] 支持并且无法修改(好吧,您可以修改单个元素,但不能调整它的大小)。

关于java - 从Java中的多维数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8509003/

相关文章:

java - Maven编译错误(要求更高的JDK版本)

java - 英制 到 公斤 转换器

Java - 获取输入字符串的各个子字符串

c# - byte[] 的图像无限期挂起

python - 在Python中平均分配和压缩两个不同长度的列表

java - Spring为SQL表创建数据库存储库

ios - 将数组数据模型转换为字典(swift)

arrays - 查找数组中无序对的数量

java - 从列表中的类访问类方法

list - 在 Clojure 中,什么时候应该在列表上使用向量,反之亦然?