Was ist der beste Weg, um die letzten N Elemente eines Perl-Array zu bekommen?
Frage
Was ist der beste Weg, um die letzten N Elemente eines Perl-Array zu bekommen?
Wenn das Array kleiner als N ist, ich will nicht, ein Bündel von undefs
im Rückgabewert.
Lösung
@last_n = @source[-$n..-1];
Wenn Sie benötigen keine undef
s, dann:
@last_n = ($n >= @source) ? @source : @source[-$n..-1];
Andere Tipps
Ich denke, was Sie wollen, ist ein Scheibe .
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;
Ausgänge:
v w x y z
einfach, keine Mathematik:
@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
Wie @a in Skalarkontext gibt die Länge auf einem Array ein und weil @a == $#a + 1
(es sei denn, $[
ungleich Null gesetzt ist), kann man die Scheibe aus dem $ n-ten erhalten (von Null an zu zählen) bis zum letzten Elemente von @a[$n..@a-1]
-. #tmtowtdi
TMTOWTDI, aber ich denke, das ist ein wenig einfacher ist zu lesen (aber entfernt die Elemente aus @source
):
my @last_n = splice(@source, -$n);
Und wenn Sie nicht sicher sind, dass @source
mindestens $n
Elemente hat:
my @last_n = ($n >= @source) ? @source : splice(@source, -$n);