Как рассчитать строку/столбец из позиции сетки?

Учитывая сетку, где я знаю количество строк (которое фиксировано), и я знаю текущее количество столбцов (которые могут расти произвольно), как я могу вычислить строку и столбец квадрата из индекса?

           +   +   +   +   +
 Cols ---> | 0 | 1 | 2 | 3 | ...
        +--+---|---|---|---|---
         0 | 0 | 3 | 6 | 9 | ...
        +--+---|---|---|---|---
 Rows    1 | 1 | 4 | 7 | A | ...
        +--+---|---|---|---|---
         2 | 2 | 5 | 8 | B | ...
        +--+---|---|---|---|---
         .   .   .   .   .   ...
         .   .   .   .   .   .
         .   .   .   .   .   .

Итак, учитывая:

final int mRowCount = /* something */;
int mColCount;

И учитывая некоторую функцию:

private void func(int index) {

    int row = index % mRowCount;
    int col = ???

Как правильно рассчитать col? Это должна быть функция как количества столбцов, так и строк, я уверен. Но мой мозг терпит неудачу.

Пример: если index == 4, то row = 1, col = 1. Если index == 2, то row = 2, col = 0.

Спасибо.

Ответ 1

int col = index / mRowCount;

Ответ 2

index = col * mRowCount + row

затем

row = index % mRowCount;

col = index / mRowCount;

Ответ 3

Я считаю, что столбец будет получен целым делением:

int col = index / mRowCount;

Можно было бы ограничить его одним делением (исключить работу модуля), заменив его умножением и вычитанием. Я не уверен, что это дешевле; вероятно, не имеет значения в большинстве ситуаций:

int col = index / mRowCount;
int row = index - col * mRowCount;

Ответ 4

Не понял вашу настройку, но если вы получили нормальную сетку с прогрессивным индексом, как в Android GridLayout:

 +-------------------+
 | 0 | 1 | 2 | 3 | 4 |
 |---|---|---|---|---|
 | 5 | 6 | 7 | 8 | 9 | 
 |---|---|---|---|---|
 | 10| 11| 12| 13| 14|
 |---|---|---|---|---|
 | 15| 16| 17| 18| 19| 
 +-------------------+

Вычисление:

int col = index % colCount;
int row = index / colCount;

Например:

row of index 6 = 6 / 5 = 1
column of index 12 = 12 % 5 = 2

Ответ 5

column = index / max_rows;
row    = index % max_rows;

Ответ 6

row = index/numberOfColumns

и

column = index% numberOfColumns