将数组中的多个值插入另一个数组

时间:2011-04-20 15:17:56

标签: arrays perl linked-list

我需要使用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);

3 个答案:

答案 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上的问题中。如果你重新输入它,你就有可能弄错它并使那些试图帮助你的人感到困惑。