2次元配列を1次元配列で管理したいときに悩みがちなindex対応の考え方についてです。
毎回詰まるので備忘録として。
パパッと対応を書けたらカッコイイですね~(自分だけ?)
執筆時レート:茶
目次
やりたいこと
H行 × W列の2次元配列A[i][j]を1次元配列B[ind]で管理するときに、組(i, j)と対応するindを求めたい!
結論
- ind = iW + j
実は、n進法→10進法に変換する考え方と同じ。
導出
配列A, Bのindex対応はこんな感じ。
上から順番に見ていくと、indが1増えるにつれてjが1増える。そしてjがW-1になると次は0に戻り、iが1増える。
これは10進法において、9に1を足すと位が一つ上がり10になる構造と同じである。
つまり、
- j: 1の位
- i: Wの位
と考えることが出来る。
以上の考察から、indの表し方はn進法→10進法に変換するときと同様に考えて、
- ind = iW + j
となることが分かる。
ちなみに、indからi, jを求めたいときは、i, jはそれぞれindをWで割った商、余りであるので、
- i = ind / W
- j = ind % W
となる。
3次元配列⇄1次元配列の場合
同様の考え方で、L × H × Wの3次元配列A[i][j][k]を1次元配列B[ind]で管理する場合のindex対応も分かる。
各添え字は次のように捉えられる。
- k: 1の位
- j: Wの位
- i: HWの位
よって、
- ind = iHW + jW + k