我有一个UI控件,可以在列主要格式的一系列图块中显示数据,如下所示:
0 5 10
1 6 11
2 7 12
3 8 13
4 9 14
我的数据源,一个单独的数组,给我一个项目应该出现的位置:
0 1 2
3 4 5
6 7 8
9 10 11
12 13 14
行数是静态的,具有可变数量的列。控件将给我一个索引,我必须找到适当的数据对象。因此,我需要一个公式,用于将该列主索引转换为行索引,以便我可以获取相应的项。
我创建了一个能够执行此操作的公式,但仅对计数为完美平方的数据集有效。 如何使用不完美的正方形执行此操作,例如,5x60矩阵(300个项目)?
有一种方法可以在一系列循环中执行此操作,构建一个“地图”,以便说明需要进行哪些翻译:
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
int index = j * width + i;
output[i * height + j] = input[index];
}
}
但是,我不希望将此地图保留在内存中,因为项目数量可能会变得非常高,因此,算法方法是必要的。
答案 0 :(得分:3)
int rowmajorindexfromcolumnmajorindex(int columnmajorindex, int width, int height) {
int row = columnmajorindex % height;
int column = columnmajorindex / height;
return row * width + column;
}
int columnmajorindexfromrowmajorindex(int rowmajorindex, int width, int height) {
return rowmajorindexfromcolumnmajorindex(rowmajorindex, height, width);
}