arrays - Perl:使用 'splice()' VS 链表插入数组的性能

标签 arrays performance perl linked-list

我有一个使用 Perl 数组的脚本。每个数组包含数十万个项目。

我经常需要在数组中间动态添加项目,或者从中删除项目。

我想了解是否应该使用链表而不是 Perl 数组,因为我经常进行插入和删除操作

所以我的问题是:

  • splice()是如何实现的?
  • splice()的复杂度是多少,什么时候用于将项目x插入到Perl数组的索引i
  • 您能推荐一个您使用过的 Perl 链表模块吗?

谢谢!

最佳答案

Perl 数组存储为指针数组、起始偏移量、长度和分配长度。

因此,从中间插入或删除将需要移动 4 或 8 个字节乘以数组中后面元素的数量。从任一端删除不需要移动任何东西,只需调整开始偏移或长度。在末尾插入通常只需要调整长度,但偶尔需要重新分配整个指针数组。在开头插入,perl 会尽量安排,只需要调整开头的偏移量,但有时需要移动甚至重新分配整个数组。

实际上,使用 perl 操作创建和管理链表的开销几乎在所有情况下都比仅使用数组要大得多。

要对其进行基准测试,我们需要更多地了解您的具体案例;数组的实际大小、元素的种类和大小(与拼接成本无关,但可能与链表有关)、插入/删除的相对频率等。

关于arrays - Perl:使用 'splice()' VS 链表插入数组的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24265957/

相关文章:

python - 如何在字符串中搜索子字符串值?

c - 如何在C中迭代和复制双指针

java - Exceptions 有多昂贵

objective-c - 如何加快 UITextView 的更新速度?

csv - Perl Text::CSV_XS 当注释是最后一行时将其视为数据

javascript - 在 Perl CGI 脚本中捕获 iframe 返回值

ios - 使用 block 枚举/迭代数组并知道它何时完成

c++ - 如何使用后序遍历打印排序数组?

mysql - MySQL 表的 'too many' 有多少行?

Perl 排序不会使用另一个包中的函数