Как рассчитать строку / кол от позиции сетки? - PullRequest
10 голосов
/ 23 августа 2011

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

           +   +   +   +   +
 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.

Спасибо.

Ответы [ 6 ]

7 голосов
/ 23 августа 2011

int col = index / mRowCount;

5 голосов
/ 23 августа 2011

index = col * mRowCount + row

затем

row = index % mRowCount;

col = index / mRowCount;

4 голосов
/ 09 мая 2017

Не совсем понял ваши настройки, но если вы получили нормальную сетку с прогрессивным индексом, как в 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
4 голосов
/ 23 августа 2011

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

int col = index / mRowCount;

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

int col = index / mRowCount;
int row = index - col * mRowCount;
0 голосов
/ 21 сентября 2016

row = index / numberOfColumns

и

столбец = индекс% numberOfColumns

0 голосов
/ 23 августа 2011
column = index / max_rows;
row    = index % max_rows;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...