我有一个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];
}
}
但是,我不希望将此映射保留在内存中,因为项的数量可能会变得非常高,因此,必须使用算法方法。
最佳答案
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);
}
关于arrays - 将行专业转换为列专业的公式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8426746/