Это может показаться домашней проблемой, но я клянусь, что это не так.Отображение массива 1D на 2D-массив
Я пытаюсь создать итератор для этого класса оболочки 2D-массива. Я подумал, что если я смогу решить эту проблему, тогда я смогу создать свой итератор.
Я это 1D массив из 9 последовательных целых чисел, начиная с 0 и заканчивая 8.
[0, 1, 2, 3, 4, 5, 6, 7, 8]
Я дал две переменные horizontal_size = 3
и vertical_size = 3
Я хочу, чтобы этот массив в 2D-массив, который равен horizontal_size
по vertical_size
. назовем их h
и v
для краткости.
Результат, который я хочу, чтобы генерировать это:
0 1 2
3 4 5
6 7 8
Учитывая значение в массиве 1D, который говорит мне индекс, также дал h
и v
, которые являются как 3 в этом случае. Есть ли способ генерировать индексы в 2D-массиве?
Например, первый элемент в массиве 1D равен 0, который соответствует array[0][0]
. Второй элемент равен 1, который соответствует array[0][1]
Я понял, что могу получить вертикальный индекс, выполнив array1d[i] mod vertical_size
.
for getting the vertical index ::: th
0 = [0] [0] 0 мод 3 = 0 1 = [0] [1] 1 по модулю 3 = 1 2 = [0] [2] 2 мод 3 = 2
3 = [1] [0] и так далее ... 4 = [1] [1] 5 = [1] [2]
6 = [2] [0] 7 = [ 2] [1] 8 = [2] [2]
Но я не уверен, как получить горизонтальный указатель.
Я не читал ваш ответ правильно в первый раз, и я думал, что вы сказали «i/h», который был ответом, который я пробовал, но не оказался правильным. Я даже не думал о делении на 'v'. Благодаря! – Rhs
Индексы являются либо i/v, либо i% v, либо i/h и i% h, в зависимости от того, как вы их выбираете, если h = v, как здесь, вы не можете отличить – Joni
Я изначально имел что-то, что было 5 2. Я просто разместил 3 на 3 как простой пример. Правильный аналог - пол (i/v) – Rhs