【问题标题】:How can I get the indexes of an object in a multidimensional array?如何获取多维数组中对象的索引?
【发布时间】:2018-04-25 03:47:45
【问题描述】:

假设我有一个多维对象数组

Object[][][] obj=new Object[10][10][10];

充满了任何种类的物体。有没有方法

public ArrayList(Integer) getIndices(Object o)

将对象作为输入并将对象的索引返回给我? 我不关心我的多维数组的实际类:您可以将Object 替换为您选择的另一个类。我什至不关心输出的类型:它可以是intarray,或者ArrayList(Integer),或者任何你想要的。最后,当输入对象不在 3D 矩阵中时,我不关心此方法是否会引发异常。 我只是想了解有哪些方法或多或少可以满足我的需求。

有这样的方法吗?如果不是,我该如何定义它?我能想到的唯一方法是迭代 3D 矩阵的条目并使用.equals 手动检查。这是最快的方法吗(即使是大型矩阵)?

提前谢谢你

附:我检查了诸如this 之类的旧问题,但没有帮助。

【问题讨论】:

  • 通过索引,三重循环查找对象。这将是 O(a * b * c) - 其中 abc 是维度的大小。
  • 这是最快的方法吗?:这是唯一的方法。
  • 谢谢,我只是想知道是否可以定义更好的方法,但我知道不是这样
  • 如果你想要更高的效率,你必须花费额外的内存:维护一个映射对象-> int[](索引)的反向集。这当然只有当一个对象在你的矩阵中出现的次数不超过一次时才有效。或者,您可以在 Object 中添加一些字段来保存索引。

标签: java multidimensional-array indices


【解决方案1】:

你可以使用这个方法来做到这一点..

  private static void find_indices(int[][][] arr,int row, int col, int height, int value) {
    ArrayList<String> list = new ArrayList<>();
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            for (int k = 0; k < height; k++) {
                if (arr[i][j][k] == value) {
                    list.add(String.valueOf(i));
                    list.add(String.valueOf(j));
                    list.add(String.valueOf(k));
                    list.add(String.valueOf("\n"));
                }
            }
        }
    }
    for (int i = 0; i < list.size(); i++) {
        System.out.print(list.get(i));
    }
}

使用find_indices(arr, value); 调用它 这是我所有标准应用程序中的工作代码。您可以将上述方法放在任何 util 类中,并通过将数组和值作为参数发送来使用它。我在这里使用了列表,这样如果在不同的索引处找到多个对象,它将给出所有索引。 继续编码:)

【讨论】:

  • 找到后可以return。无需继续搜索。另外 - 最好是 return 一些有用的价值,而不是打印到控制台 - 也许是 int[3]?你为什么使用ArrayList&lt;String&gt; 来存储结果? OP 已经完美地描述了这一点 - 除了 OP 所说的他们不想想要做的事情的糟糕实现之外,我认为这篇文章没有添加任何东西......
  • 另外,刚刚注意到它假定数组不是锯齿状的——实际上你需要做arr[i].lengtharr[i][j].length
  • 这正是我不想做的。如果我必须在我的矩阵的每个条目中进行搜索,那么我可以使用obj[i][j][k].equals(o) 进行检查(因为尽管你写了什么,我正在处理对象,而不仅仅是整数)然后返回我找到的索引而不保存或打印它们..
  • 没有其他选择。我已经打印了它以关闭该方法。您可以退回它或任何您想要的东西。但是我在我的应用程序中执行此操作时进行了很多搜索,并将其作为唯一的方法。其次,如果存在相同元素的多个对象,则使用列表。第三,返回类型可以更改或通用。没什么大不了的。
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 2015-06-15
相关资源
最近更新 更多