java - 如何在不循环整个数组的情况下从二维数组中获取元素?
问题描述
我有一个简单的课程:
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
等等。
有什么方法可以在不循环整个数组的情况下获取元素?
解决方案
你基本上想象一个以二维方式结构化的一维数组。考虑到这一点,您可以将 1d 坐标(例如,在您的情况下为 7)映射到 2d,如下所示:
[1d/宽度][1d mod 宽度]
1d 是您的“id”,宽度是 2d 数组长度
1d/width 导致您的 id 的相应“行”,以及相应“列”中的 1d mod 宽度
推荐阅读
- wordpress - woocommere配送区如何添加区?
- database - 数据库中用户配对匹配的常用方法?
- javascript - 当网页滚动了几个 px 时如何向 html 元素添加一个类
- graphql - GraphQL 中基于光标的分页命名约定
- javascript - 当值带有逗号时计算不起作用
- git - 如何在树中找到所有“活动”的 git 提交?
- flutter - 文本不为空时出现Flutter textfield clear按钮
- angular - 如何在 Angular 中的另一个动态加载的组件中渲染组件?
- hololens - 我们可以从感知模拟中的选定对象中读取文本吗
- deep-learning - 在目标检测中,您是否在 Ground Truth 边界框上训练 CNN 分类器?