Perl 数组是一种抽象数据类型。Perl 数组的内部机制是什么?它是用动态数组还是链表实现的?由于数组元素具有随机访问权限,因此我假设动态指针数组或对标量的引用是有意义的。但是,在数组的头部使用 shift 和 unshift 操作,数组是否必须通过这些操作移动其所有元素?对我来说听起来效率低下。任何想法?
问问题
2099 次
2 回答
24
看看这个:http ://www.perlmonks.org/?node_id=17890
(取自那里:)
Perl 使用数组和第一个/最后一个元素偏移量实现列表。分配的数组大于所需的偏移量,最初指向数组中间的偏移量,因此在需要重新分配底层数组之前,在两个方向(取消移位和推送/插入)都有增长空间。这种实现的结果是 perl 的所有原始列表运算符(插入、获取、确定数组大小、推送、弹出、移位、取消移位等)都在 O(1) 时间内执行。
于 2010-06-28T06:04:21.703 回答
6
这些类型记录在perlguts中(有关文档,请参阅Perl Internals)- AV 用于数组,HV 用于哈希。
于 2010-06-28T06:34:36.420 回答