You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将锯齿状二维int数组扁平化并实现空间高效的x/y索引映射

最优实现方案

直接使用行优先线性映射即可完全满足需求,没有任何空间冗余,计算逻辑简单高效:

  • 一维数组大小直接设为总行数 × 总列数,这里就是 22 * 22 = 484,完全无浪费
  • x、y转一维索引公式:index = x * 22 + y
  • 一维索引反向还原x、y公式:
    • x = index / 22
    • y = index % 22

代码示例

// 创建扁平化数组
int[] arr = new int[22 * 22];

// 写入元素,直接用x、y定位
for (int x = 0; x < 22; ++x) {
    for (int y = 0; y < 22; ++y) {
        arr[x * 22 + y] = ...; // 赋值逻辑和原二维数组完全一致
    }
}

// 单独用x、y读取元素
int target = arr[targetX * 22 + targetY];

// 从一维索引反推x、y
int index = 123;
int x = index / 22;
int y = index % 22;

方案说明

你之前的位运算方案本质是把列数向上取整到了2的5次幂(32),才导致了空间冗余。如果你的场景没有强制要求必须用位运算做索引转换,上述乘除取模的方案是空间利用率100%的最优解,现代CPU对整数乘除的优化已经非常成熟,性能开销可以忽略。
如果确实需要用位运算提升计算速度,可以在列数本身就是2的幂次时使用,比如如果你的数组大小是32×32,再用(x << 5) | y的逻辑就没有空间浪费了。

内容的提问来源于stack exchange,提问作者NewUwpPerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 16:03:02