我有一个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/

10-12 14:18