2016-06-15 5 views
1

こんにちは私はチャンクを使用する2dマップローダーで作業しています。2つの識別子(rowIndex、colIndex)を使用して配列を比較する高速方法

私はスクリーン境界と交差しているチャンクの位置を計算するためにこのメソッドを使用しています。

// left bottom 
rect.x = x - x % chunkSize; 
if (x < 0) rect.x -= chunkSize 
rect.colIndex = (int) (rect.x/chunkSize); 

rect.y = y - y % chunkSize; 
if (y < 0) rect.y -= chunkSize; 
rect.rowIndex = (int) (rect.y/chunkSize); 

// right top 
float x2 = x + width, y2 = y + height; 

float rectX = x2 - x2 % chunkSize; 
if (x2 < 0) rectX -= chunkSize; 
int colIndex = (int) (rectX/chunkSize); 

float rectY = y2 - y2 % chunkSize; 
if (y2 < 0) rectY -= chunkSize; 
int rowIndex = (int) (rectY/chunkSize); 

rect.rows = rowIndex - rect.rowIndex + 1; 
rect.cols = colIndex - rect.colIndex + 1; 

for (int i = 0; i < rect.rows; i++) { 
    for (int j = 0; j < rect.cols; j++) { 
     Chunk chunk = chunkPool.obtain(); 
     chunk.x = rect.x + chunkSize * j; 
     chunk.y = rect.y + chunkSize * i; 
     chunk.rowIndex = rect.rowIndex + i; 
     chunk.colIndex = rect.colIndex + j; 
    } 
} 

情報:

  • チャンクが追加される場合、その除去チャンクデータHASTをアンロードする場合には、データをロードしなければなりません。

  • このメソッドは、画面x/y/sizeが変更されるたびに呼び出されます。

私の質問は:私はチャンクが最後の配列から/削除追加されたかを知る必要があり。どうやってやるの。私を識別するためにはrowIndex/colIndexを使用します。それは頻繁に呼び出されるので速くなければなりません。 HashTableをオプションにできますか?

答えて

1

ハッシュテーブルでは、検索のキーが1つしかないため、行と列で値を検索する必要があります。したがって、必要な2つのディメンションを取得するには、複合キーを作成するか、表のようなデータ構造を使用する必要があります。グアバはすでにこれを実装しています。https://github.com/google/guava/wiki/NewCollectionTypesExplained#table

+0

負のインデックス値が許可されているかどうか知っていますか? –

+1

はいどのインデックスも、インデックスキーのタイプに一致する限り有効です。 – maxTrialfire

関連する問題