Wie werden Arrays in Perl implementiert?
-
01-10-2019 - |
Frage
Der Perl-Array ist ein abstrakter Datentyp. Was ist der interne Mechanismus für den Perl-Array? Ist es mit dynamischen Arrays oder verkettete Liste implementiert? Da die Array-Elemente mit wahlfreiem Zugriff haben, würde ich ein dynamisches Array von Zeigern übernehmen, oder Verweise auf Skalare Sinn machen. Jedoch mit Schicht- und unshift Betrieb an der Spitze der Anordnung, müßte das Array alle seine Elemente mit diesen Operationen bewegen? klingen ineffizient zu mir. Jeder Gedanke?
Lösung
Haben Sie einen Blick auf diese: http://www.perlmonks.org/?node_id=17890
(genommen von dort:)
Perl implementiert Listen mit einem Array und erste / letzte Element Offsets. Das Array ist größer zugeteilt als nötig mit dem Versatz in der Mitte des Feldes ursprünglich zeigen, so gibt es Raum in beiden Richtungen zu wachsen (unshifts und Schübe / Einsätze) vor einer Neuzuweisung des zugrunde liegenden Array erforderlich. Die Folge dieser Implementierung ist, dass alle primitiven Operatoren Liste der Perl (Insertion, Abrufen, Bestimmen Feldgrße, push, pop, Verschiebung, unshift, etc.) führen in O (1) Zeit.
Andere Tipps
sind die Typen in der perlguts (siehe Perl Internals für die zugehörige Dokumentation.) - und sind AV für Arrays und HV für Hashes