Frage Fügen Sie mehrere Werte von einem Array in ein anderes Array ein


Ich muss eine große Menge von Daten in Arrays mit Perl verarbeiten. An bestimmten Punkten muss ich die Werte eines zweiten Arrays in ein primäres Array einfügen. das habe ich gesehen spleißen sollte normalerweise der richtige Weg sein. Nach ein wenig Recherche habe ich jedoch gesehen, dass diese Funktion speicherintensiv ist und im Laufe der Zeit zu einem ernsthaften Leistungsproblem führen könnte.

Hier ist im Grunde, was ich tun muss -

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

Fügen Sie nun den Inhalt von ein @zweite in @primär bei Offset 4 zu erhalten -

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

Ist die Verwendung von verketteten Listen der effizienteste Weg, um ein primäres Array zu verwalten, das mehr als 2000 Elemente enthält?

Hinweis: Kann jemand bestätigen, dass dies der richtige Weg ist?

$Tail = splice($primary, 4);
push(@primary, @second, $Tail);

?


5
2018-04-20 15:17


Ursprung


Antworten:


splice @primary, 4, 0, @second;

7
2018-04-20 16:02



Das ist ein "korrekter" Weg, es insofaras zu machen. Es ist jedoch wahrscheinlich nicht der einfachste Weg.

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

Dies zeigt an:

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

wonach Sie suchen. Selbst bei 2k-Elementen finden Sie wahrscheinlich dieses Fast Enough (TM).


1
2018-04-20 16:07



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

Das tut nicht, was Sie behaupten. Es gibt einen wichtigen Unterschied zwischen

# Store a list of values in an array
@primary = (1, 2, 3, 4, 5, 6, 7, 8, 9);

Und

# 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];

Ich erwarte, dass es sich nur um einen Übertragungsfehler handelt, aber es lohnt sich, auf diese Dinge hinzuweisen, falls jemand anders versucht, Ihren Code zu kopieren.

Und zum späteren Nachschlagen können Sie Code in Fragen zu Stack Overflow ausschneiden und einfügen. Wenn Sie es erneut eingeben, gibt es eine Chance, dass Sie es falsch verstehen und die Leute verwirren, die versuchen, Ihnen zu helfen.


0
2018-04-20 16:20