2010-06-28 11 views
17

La matriz de Perl es un tipo de datos abstracto. ¿Cuál es el mecanismo interno para la matriz de Perl? ¿Se implementa con una matriz dinámica o una lista vinculada? Dado que los elementos de la matriz tienen acceso aleatorio, asumiría una matriz dinámica de punteros, o las referencias a escalares tienen sentido. Sin embargo, con la operación shift y unshift en la cabecera de la matriz, ¿la matriz tendría que mover todos sus elementos con estas operaciones? me parece ineficiente. ¿Cualquier pensamiento?¿Cómo se implementan las matrices en Perl?

Respuesta

23

Tener un vistazo a esto: http://www.perlmonks.org/?node_id=17890

(tomado de allí :)

Perl implementa listas con una matriz y primeros/compensaciones último elemento. La matriz se asigna más grande de lo necesario con los desplazamientos que originalmente apuntan en el medio de la matriz, por lo que hay espacio para crecer en ambas direcciones (desviaciones y empujes/inserciones) antes de que sea necesaria una reasignación de la matriz subyacente. La consecuencia de esta implementación es que todos los operadores de listas primitivas de Perl (inserción, recuperación, determinación del tamaño del array, push, pop, shift, unshift, etc.) se ejecutan en O (1) tiempo.

+0

Gracias por el enlace. Responde mi pregunta –

6

Los tipos están documentados en perlguts (consulte Perl Internals para obtener documentación relacionada), y son AV para matrices y HV para hash.

Cuestiones relacionadas