0

Ich habe versucht, typisierten Arrays anstelle von Arrays zu verwenden, Speicher zu reduzieren: Javascript mehrdimensionale typisierten Array (Int8Array) Beispiel

function createarrayInt8(numrows,numcols,number){ 
 
     
 
\t var arr = new Int8Array(numrows); 
 
      
 
\t for (var i = 0; i < numrows; ++i){ 
 
\t \t var columns = new Int8Array(numcols); 
 
\t \t for (var j = 0; j < numcols; ++j){ 
 
\t \t \t columns[j] = number; 
 
\t \t } 
 
\t \t arr[i] = columns; 
 
\t } 
 
    
 
\t return arr; 
 
}

Aber ich kann nicht mehrdimensionale typisierten Array erstellen. Warum? Muss ich nur die "number" var zu Int8 umwandeln?

+0

Nun, ein typisiertes Array kann nur Werte seines Typs speichern. Ein uint8-Array kann daher nur vorzeichenlose 8-Bit-Ganzzahlen speichern, aber keine Arrays (von uints). –

+0

Ich dachte fast so :). Aber wie kann es ein multidimensionales Array bekommen, das nur vorzeichenlose 8-Bit-Ganzzahlen speichert, um den verwendeten Speicher zu reduzieren? –

Antwort

4

Ein typisiertes Int8Array kann nur 8-Bit-Ganzzahlen enthalten. So arr[i] = columns wird nicht funktionieren, da Spalten vom Typ Int8Array ist, die nicht konvertiert und gespeichert werden kann (in irgendeiner sinnvollen Weise) als eine 8-Bit-Ganzzahl.

Lösung: Entweder machen arr eine generische Array, deren Elemente können Arrays oder - wahrscheinlich die fortgeschritteneren aber in der Regel leistungsfähigere Lösung - speichern Sie Ihre mehrdimensionales Array als eine einzige flache Array der Größe numrows * numcols und ein Element Zugriff über arr[column + row * numcols]:

var numrows = 5, numcols = 4; 
 
var arr = new Int8Array(numrows * numcols).fill(0); 
 

 
arr[3 + 1 * numrows] = 1; // col = 3, row = 1 
 

 
console.log (arr);

Verwandte Themen