我需要使用Perl处理数组中的大量数据。 在某些点上,我需要在主数组中插入第二个数组的值。 我已经看到 splice 通常应该是要走的路。但是,在研究了一下之后,我发现这个功能是内存密集型的,随着时间的推移会导致严重的性能问题。
这基本上是我需要做的 -
# two arrays
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9];
@second = [a, b, c, d e];
现在在偏移4处将 @second 的内容插入 @primary 以获取 -
@primary = [1, 2, 3, 4, a, b, c, d, e, 5, 6, 7, 8, 9];
当我必须处理一个包含2000多个元素的主数组时,使用链表是否是最有效的方法?
注意:任何人都可以确认这是正确的方法吗
$Tail = splice($primary, 4);
push(@primary, @second, $Tail);
答案 0 :(得分:7)
splice @primary, 4, 0, @second;
答案 1 :(得分:1)
这是一种“正确”的方式来做它的工作。但是,它可能不是最直接的方式。
#!/usr/bin/perl -l
use Data::Dump qw(dump);
my @pri = (1..9);
my @sec = ('a'..'e');
print "pri = ", dump(\@pri);
print "sec = ", dump(\@sec);
splice @pri, 4, 0, @sec; ### answer
print "now pri = ", dump(\@pri);
显示:
$ perl x.pl
pri = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sec = ["a", "b", "c", "d", "e"]
now pri = [1, 2, 3, 4, "a", "b", "c", "d", "e", 5, 6, 7, 8, 9]
这就是你要找的东西。即使是2k元素,你也可能会找到这个Fast Enough(TM)。
答案 2 :(得分:0)
# two arrays
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9];
@second = [a, b, c, d e];
这不符合您的要求。
之间有一个重要的区别# Store a list of values in an array
@primary = (1, 2, 3, 4, 5, 6, 7, 8, 9);
和
# Store a list of values in an anonymous array
# Then store a reference to that array in another array
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9];
我希望这只是一个转录错误,但是如果其他人试图复制您的代码,则值得指出这些事情。
并且,为了将来参考,请将代码剪切并粘贴到Stack Overflow上的问题中。如果你重新输入它,你就有可能弄错它并使那些试图帮助你的人感到困惑。