首页 > 解决方案 > 如何在不循环整个数组的情况下从二维数组中获取元素?

问题描述

我有一个简单的课程:

public class XYPoint {
    public int x, y;
}

还有一个包含 Point 对象数组的二维数组:

(-2,  2)(-1,  2)(0,  2)(1,  2)(2,  2)
(-2,  1)(-1,  1)(0,  1)(1,  1)(2,  1)
(-2,  0)(-1,  0)(0,  0)(1,  0)(2,  0)
(-2, -1)(-1, -1)(0, -1)(1, -1)(2, -1)
(-2, -2)(-1, -2)(0, -2)(1, -2)(2, -2)

对应的id是:

 0  1  2  3  4 
 5  6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

假设我想获取 id 处的元素0,那么它将返回-2, 2。如果我想从中获取6,它将返回-1, 1等等。

有什么方法可以在不循环整个数组的情况下获取元素?

标签: javaarraysjava-8

解决方案


你基本上想象一个以二维方式结构化的一维数组。考虑到这一点,您可以将 1d 坐标(例如,在您的情况下为 7)映射到 2d,如下所示:

[1d/宽度][1d mod 宽度]

1d 是您的“id”,宽度是 2d 数组长度

1d/width 导致您的 id 的相应“行”,以及相应“列”中的 1d mod 宽度


推荐阅读