2016-06-15 10 views
1

Hallo Ich arbeite an einem 2d Map Loader, der Chunks verwendet.Schnelle Möglichkeit, Arrays mit zwei Identifikatoren zu vergleichen (rowIndex, colIndex)

ich diese Methode bin mit der Position des Chunks zu berechnen, die mit den Rastergrenzen werden schneiden.

// 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; 
    } 
} 

Info:

  • Wenn ein Chunk hinzugefügt wird, hat Daten zu laden, wenn sie das Chunk-Daten haben entfernt werden entladen.

  • Diese Methode wird jedes Mal aufgerufen, wenn der Bildschirm x/y/size ändert.

Meine Frage ist: Ich muss wissen, was Chunks aus dem letzten Array entfernt/hinzugefügt wird. Wie kann ich das machen. Zur Identifikation würde ich die rowIndex/colIndex verwenden. Es sollte schnell sein, weil es häufig aufgerufen wird. Könnte eine HashTable eine Option sein?

Antwort

1

Eine Hash-Tabelle gibt Ihnen nur einen Schlüssel für die Suche, müssen Sie Werte von Zeile und Spalte zum Nachschlagen. Sie müssen also entweder einen zusammengesetzten Schlüssel erstellen oder eine tabellenartige Datenstruktur verwenden, um die benötigten 2 Dimensionen zu erhalten. Es passiert einfach so, dass Guava dies hier bereits umgesetzt hat: https://github.com/google/guava/wiki/NewCollectionTypesExplained#table

+0

Wissen Sie, ob negative Indexwerte sind erlaubt? –

+1

Ja Jeder Index ist gültig, solange er dem Typ Ihres Indexschlüssels entspricht – maxTrialfire

Verwandte Themen