Ответ 1
int col = index / mRowCount;
Учитывая сетку, где я знаю количество строк (которое фиксировано), и я знаю текущее количество столбцов (которые могут расти произвольно), как я могу вычислить строку и столбец квадрата из индекса?
+ + + + +
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
.
Спасибо.
int col = index / mRowCount;
index = col * mRowCount + row
затем
row = index % mRowCount;
col = index / mRowCount;
Я считаю, что столбец будет получен целым делением:
int col = index / mRowCount;
Можно было бы ограничить его одним делением (исключить работу модуля), заменив его умножением и вычитанием. Я не уверен, что это дешевле; вероятно, не имеет значения в большинстве ситуаций:
int col = index / mRowCount;
int row = index - col * mRowCount;
Не понял вашу настройку, но если вы получили нормальную сетку с прогрессивным индексом, как в 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
column = index / max_rows;
row = index % max_rows;
row = index/numberOfColumns
и
column = index% numberOfColumns