java - 访问m维数组中n维数组的索引(n<m)java

标签 java arrays multidimensional-array

为了简化上下文,假设我们在 Java 中有一个 2D 数组,我们需要获取给定 1D 数组的索引。有没有更干净的方法来做同样的事情?我的数组的大小非常小(3 x 8),所以我设法使用 for 循环暴力破解元素并获得索引,但是如果数组的大小足够大怎么办?为了我的目的,我使用了以下代码:

private int getIndex(double[][] centerArrayOriginal, double[] row){
        double[] currRow;
        int index = -1;
        for (int i=0; i<centerArrayOriginal.length;i++){
            currRow = centerArrayOriginal[i];
            if ((currRow[0] == row[0]) && (currRow[1] == row[1]) && (currRow[2] == row[2])){
                index = i;
            }
        }
        return index;
    }

显然这不是最简洁的方法,我尝试使用 double[] 元素的 ArrayList 并使用 .indexOf() 方法,但它总是返回 -1

最佳答案

如果您必须在数组中搜索给定行,我看不到“暴力破解”的替代方法。但是,当您使用 double 数组时,应该注意,由于舍入错误,如果 row 一维数组来自例如,行查找算法可能无法工作。一个计算结果。仅当 centerArrayOriginalrow 的数据均由 double 文字(常量)组成时,您才应假定可靠的结果。

无论如何,这是一个使用两个嵌套 for 循环从任意大小的 2D 数组中查找行的解决方案:

 private static int getIndex(double[][] centerArrayOriginal, double[] row) {

    for (int i = 0; i < centerArrayOriginal.length; i++) {
        double[] currRow = centerArrayOriginal[i];

        if (currRow.length != row.length) {
            throw new IllegalArgumentException(String.format(
                    "The size of the input row (%d) does not "
                            + "match the size of the rows in the array (%d)",
                    row.length, currRow.length));
        }

        boolean allElementsEqual = true;

        for (int j = 0; j < row.length; j++) {
            if (currRow[j] != row[j]) {
                allElementsEqual = false;
                break;
            }
        }

        if (allElementsEqual) {
            return i;
        }
    }
    return -1;
}

测试代码:

double[][] data = new double[][] 
        {
            { 1.0d, 2.0d, 3.0d },
            { 4.0d, 5.0d, 6.0d },
            { 7.0d, 8.0d, 9.0d } 
        };
double[] test = new double[] {4.0d, 5.0d, 6.0d};
System.out.println(getIndex(data, test));

打印出来

1

关于java - 访问m维数组中n维数组的索引(n<m)java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31632746/

相关文章:

java - Websphere 上的 JPA 问题——在 Tomcat 上运行良好

python - 如何找到 n 个数组中每个数组中包含的值(Python)?

javascript - 如何在 Javascript 中的单个 map 函数内执行两个操作

C 编程二维数组问题

c++ - 一次执行后嵌套 for 循环中出现意外/看不见的中断 : Gaussian elimination

javascript - 在javascript中推送多维数组

java - Android Recycler View 仅选择一张图片并在所选图片上显示刻度线

javascript - 为什么我的 CSS 和 PHP 包含没有加载到我的 WebView 中

java - 如何查看eclipse中打印的内容? java

java - 通过 java 2D ArrayList 字符串进行矩阵搜索以查找重复实例,广度优先?