给定一个我知道行数(固定)的网格,并且我知道当前的列数(可以任意增长),如何根据它的索引计算一个正方形的行和列? / p>
+ + + + +
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
。
感谢。
答案 0 :(得分:7)
int col = index / mRowCount;
答案 1 :(得分:5)
index = col * mRowCount + row
然后
row = index % mRowCount;
col = index / mRowCount;
答案 2 :(得分:4)
我相信该列将通过整数除法获得:
int col = index / mRowCount;
可以通过乘法和减法将其限制为单个除法(消除模数运算)。我不确定这是否成本更低;在大多数情况下可能无关紧要:
int col = index / mRowCount;
int row = index - col * mRowCount;
答案 3 :(得分: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
答案 4 :(得分:0)
column = index / max_rows;
row = index % max_rows;
答案 5 :(得分:0)
row = index / numberOfColumns
和
column = index%numberOfColumns
答案 6 :(得分:0)
row = CEILING(index / numberOfColumns)
CEILING舍入到下一个整数
col = MOD(index / numberOfColumns)
,除了一个例外,您必须考虑->。当MOD = 0时,如果col结果为零,则您设置col=numberOfColumns
(例如,假设numberOfColumns=48
...那么,MOD(96, 48)
是零,MOD(48, 48)=0
也是...。。。因为被48整除的任何东西的MOD = 0 ... in换句话说,当MOD = 0时,您位于LAST或HIGHEST列中,而您位于numberOfColumns列中