Вставить несколько значений из массива в другой массив - PullRequest
5 голосов
/ 20 апреля 2011

Мне нужно обработать большой объем данных в массивах с помощью Perl. В определенные моменты мне нужно будет вставить значения второго массива в основной массив. Я видел, что сплайс должен быть обычным способом. Однако после небольшого исследования я понял, что эта функция требует большого объема памяти и со временем может привести к серьезным проблемам с производительностью.

Вот в основном то, что мне нужно сделать -

# two arrays
@primary = [1, 2, 3, 4, 5, 6, 7, 8, 9];
@second = [a, b, c, d e];

Теперь вставьте содержимое @ second в @ primary со смещением 4, чтобы получить -

@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 ]

7 голосов
/ 20 апреля 2011
splice @primary, 4, 0, @second;
1 голос
/ 20 апреля 2011

Это «правильный» способ сделать это, если он работает. Тем не менее, это, вероятно, не самый простой способ.

#!/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).

0 голосов
/ 20 апреля 2011
# 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];

Я ожидаю, что это была просто ошибка транскрипции, но стоит указать на это, если кто-то еще попытается скопировать ваш код.

И, для дальнейшего использования, пожалуйста, вырезайте и вставляйте код в вопросы о переполнении стека.Если вы перепечатаете его, есть вероятность, что вы ошибетесь и запутаете людей, которые пытаются вам помочь.

...