Was genau ist ein dichtes Array?

9

Die Erklärung für ein dichtes Array, das ich aus ein paar Seiten gelesen habe, scheint im Widerspruch zu stehen. Ich möchte etwas Hilfe verstehen, was es ist.

Während einige Links ( Suchergebnis 1 , Suchergebnis 2 ) schlagen vor, dass es einfach ein Array ist, wo:

  1. Die Elemente des Arrays sind bekanntermaßen spezifische Werte; und
  2. werden dem Array zum Zeitpunkt seiner Initialisierung zugewiesen.

Die Anspielung ist, dass JavaScript-Arrays dicht sind.

Bis hier macht alles Sinn.

Aber diese Aussage stammt aus dem JavaScript Guide im Mozilla Developer Network (MDN ) sagt:

  

Da sich die Länge eines Arrays jederzeit ändern kann und Daten an nicht zusammenhängenden Positionen im Array gespeichert werden können, sind dies JavaScript-Arrays    nicht garantiert dicht zu sein ; Dies hängt davon ab, wie der Programmierer entscheidet   um sie zu benutzen. Im Allgemeinen sind dies bequeme Eigenschaften; aber falls   Diese Funktionen sind für Ihre spezielle Verwendung nicht wünschenswert   Verwenden Sie typisierte Arrays.

Und das hat mich jetzt verwirrt. Meine Frage ist:

Was bedeutet die Aussage auf der MDN-Seite, wenn gesagt wird, dass JavaScript-Arrays nicht garantiert dicht sind? Wenn dies bedeutet, dass das Folgende kein dichtes Array ist, weil eines oder mehrere seiner Elemente zum Zeitpunkt der Initialisierung undefined sind, warum scheinen dann die oben aufgeführten Links zu zeigen, dass JavaScript-Arrays tatsächlich dicht sind?

%Vor%     
Water Cooler v2 19.08.2016, 02:23
quelle

2 Antworten

9

"Dichte" steht im Gegensatz zu "spärlich" und wird im Allgemeinen verwendet, wenn über Speicher gesprochen wird. Zum Beispiel ist dieses Array dicht:

%Vor%

Es kann genau so im Speicher gespeichert werden: eine Abfolge von drei Orten, wobei die ersten zwei undefined sind und der dritte 2 .

Dieses Array ist spärlich:

%Vor%

Es ist nicht im Speicher als eine Sequenz von 100000001 Orten gespeichert, da es furchtbar ineffizient wäre. Es ist definitiv nicht 100000000 Orte von undefined gefolgt von 100000000 . Es heißt nur 100000000. Eins ist 100000000 , und den ersten 100000000 Elementen ist kein Platz zugewiesen.

(Tatsächlich versuchen Sie dies mit 2 anstelle von 100000000 , und Sie werden eine seltsame Sache bemerken: Chrome zeigt das dichte Array als [undefined, undefined, 2] an, aber das spärliche als [undefined × 2, 2] .)

    
Amadan 19.08.2016, 02:31
quelle
4

Diese Artikel sagen, dass Sie ein dichtes Array erstellen können. Dies bedeutet, dass zum Zeitpunkt der Erstellung solche Arrays dicht sind, da sie in Arrays wie

vorkommen %Vor%

Jedes Element ist gesetzt: von 0 bis Länge-1 gibt es keinen undefinierten Wert. Oder besser gesagt: Jeder Position von 0 bis Länge 1 wurde ein Wert zugewiesen (auch wenn der Wert tatsächlich undefined ist).

Sie können diese Arrays jedoch nicht mehr dicht machen, indem Sie etwa Folgendes tun:

%Vor%

Dieses Array, das dicht war, ist nicht mehr dicht, da die Elemente 0 1 2 und 20 (anders als Elemente in 3 bis 19) auf einen Wert gesetzt sind (dieses Array hat 4 Elemente, nicht 21).

    
Luis Masuelli 19.08.2016 02:32
quelle

Tags und Links