2011-12-08 10 views
2

私は戻ってそうのような列の主要なフォーマットであるタイルの系列のデータを表示する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]; 
    } 
} 

しかし、アイテムの数が潜在的に非常に高くなる可能性があるため、アルゴリズム的なアプローチが必要です。

答えて

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); 
} 
関連する問題