Come vengono implementati gli array in Perl?
-
01-10-2019 - |
Domanda
L'array Perl è un tipo di dati astratti. Qual è il meccanismo interno per la matrice Perl? E 'implementato con array dinamico o lista collegata? Dal momento che gli elementi di matrice hanno accesso casuale, vorrei assumere una matrice dinamica di puntatori o riferimenti a scalari senso. Tuttavia, con lo spostamento ed il funzionamento non innesto alla testa di matrice, la matrice avrebbe dovuto spostare tutti i suoi elementi con queste operazioni? suono inefficiente per me. Ogni pensiero?
Soluzione
Date un'occhiata a questo: http://www.perlmonks.org/?node_id=17890
(preso da lì:)
Perl implementa liste con un array e prima / ultima offset elemento. L'array è allocato più grandi del necessario con gli offset originariamente punta nel mezzo della matrice per cui v'è spazio per crescere in entrambe le direzioni (Appenna e spinge / inserti) prima di una ridistribuzione della matrice sottostante è necessaria. La conseguenza di questa implementazione è che tutti operatori di lista primitive di Perl (inserimento, il recupero, la determinazione della dimensione dell'array, spinta, pop, spostamento, unshift, ecc) eseguire in O (1).
Altri suggerimenti
I tipi sono documentati nella perlguts (vedi Perl Internals per la relativa documentazione) -. e sono AV per array e gli hash per HV