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.

War es hilfreich?

Lösung

@last_n = @source[-$n..-1];

Wenn Sie benötigen keine undefs, 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top