gpt4 book ai didi

java - 以有效的方式获取所有可能的数组索引位置

转载 作者:行者123 更新时间:2023-12-01 10:10:46 24 4
gpt4 key购买 nike

嗨,我想找到一种方法来查找任意大小和任意数量的维度大小数组中的所有可能的索引位置。例如:

int [][][] myArray = new int [2][3][2]

然后我想要所有可能的数组索引位置,因此输出将类似于:

0,0,0
1,0,0
0,1,0
0,2,0

等等,基本上是数组的所有位置,这是一种比拥有大量嵌入循环更有效的方法。

最佳答案

多维数组是语法糖,它们物理上位于一维内存中:

所以,你可以尝试这样的事情:

final int dim1 = 2;
final int dim2 = 3;
final int dim3 = 4;
final int[][][] myArray = new int[dim1][dim2][dim3];

for (long i = 0; i < ((long) dim1 * dim2 * dim3); i++) {
long idx = i;
final int i3 = (int) (idx % dim3);
idx /= dim3;
final int i2 = (int) (idx % dim2);
idx /= dim2;
final int i1 = (int) idx;
System.out.println(i1 + "," + i2 + "," + i3);
}

注意:此代码使用 %/ 运算符,速度相当慢,但如果您的尺寸是 2 的幂,则可以将其替换为 &>>> 两者都可以比嵌套循环运行得更快

另一种变体:

final int dim1 = 2;
final int dim2 = 3;
final int dim3 = 4;
final int[][][] myArray = new int[dim1][dim2][dim3];

int i1 = 0;
int i2 = 0;
int i3 = 0;
for (long i = 0; i < ((long) dim1 * dim2 * dim3); i++) {
System.out.println(i1 + "," + i2 + "," + i3);
i3++;
if (i3 == dim3) {
i3 = 0;
i2++;
if (i2 == dim2) {
i2 = 0;
i1++;
}
}
}

它可以工作得更快,但它在循环内有分支,所以最好对两个变体进行基准测试

关于java - 以有效的方式获取所有可能的数组索引位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com