如何从一维列表存储的2×2矩阵中通过(x,y)坐标获取元素
二维坐标转一维数组索引的解决方案
这问题挺典型的,本质就是把二维矩阵的坐标映射到一维数组的索引上,咱们结合你的需求一步步理清楚:
首先根据你给出的例子——坐标(0,1)对应元素c,以及一维列表["a","b","c","d"],可以确定你的虚拟2×2矩阵是按行存储的,布局如下:
行y=0 → [a, b] 行y=1 → [c, d]
这里y代表行号,x代表该行内的列号,每一行固定有2个元素(矩阵的列数)。
核心映射公式
要通过(x,y)获取对应元素,只需要计算一维数组的索引,公式为:
索引 = y × 矩阵列数 + x
针对你的2×2矩阵,列数是2,代入后就是:索引 = y*2 + x
代码验证
直接用你的变量来测试:
var list = ["a","b","c","d"]; var x = 0; var y = 1; var columnCount = 2; // 固定为矩阵的列数 var targetIndex = y * columnCount + x; var result = list[targetIndex]; // result的值就是"c",完全符合预期
扩展说明
这个公式是通用的——如果之后你的矩阵变成M×N的大小,只需要把columnCount换成N(矩阵的列数),就能轻松完成二维坐标到一维索引的转换,适配任何按行存储的一维数组矩阵场景。
内容的提问来源于stack exchange,提问作者Jttaskk
相关产品推荐
相关产品推荐

