行专业到专业专业的翻译公式?

时间:2011-12-08 05:48:08

标签: arrays algorithm

我有一个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];
    }
}

但是,我不希望将此地图保留在内存中,因为项目数量可能会变得非常高,因此,算法方法是必要的。

1 个答案:

答案 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);
}