List::Util - Häufig benötigte Tools für Listen und Arrays
Veröffentlicht von Thomas Fahle am (Permalink)
List::Util von Graham Barr, das seit Perl 5.8.0 zu den Core-Modulen gehört, stellt eine Reihe von häufig gebrauchten Funktionen rund um Listen bzw. Arrays zur Verfügung.
Minimum, Maximum und Summe einer Liste
Die Funktionen min() und max(), liefern die kleinste bzw. größte Zahl einer Liste; sum() liefert die Summe aller Zahlen der Liste:
#!/usr/bin/perl use strict; use warnings; use List::Util qw/max min sum/; my @zahlen = qw/ 5 10 15 20 42 25 30 4 35 17 2 8 13 /; my $min = min(@zahlen); my $max = max(@zahlen); my $sum = sum(@zahlen); print "Minimum: $min\n"; print "Maximum: $max\n"; print "Summe: $sum\n";
Das Programm erzeugt folgende Ausgabe:
Minimum: 2 Maximum: 42 Summe: 226
Für Strings stehen die Funktionen maxstr() und minstr() zur Verfügung.
Mischen einer Liste
Die Funktion shuffle() vermengt die Element der Liste in zufälliger Reihenfolge:
#!/usr/bin/perl use strict; use warnings; use List::Util qw/shuffle/; my @zahlen = qw/ 5 10 15 20 42 25 30 4 35 /; print "Zahlen in Ursprungsreihenfolge: @zahlen\n"; @zahlen = shuffle @zahlen; print "Zahlen in zufaelliger Reihenfolge: @zahlen\n";
Das Programm erzeugt (z.B.) folgende Ausgabe:
Zahlen in Ursprungsreihenfolge: 5 10 15 20 42 25 30 4 35 Zahlen in zufaelliger Reihenfolge: 20 4 35 5 25 10 30 42 15
Das erste Element einer Liste, welches einem bestimmtem Kriterium entspricht
Die Funktion first() liefert das erste Element einer Liste, welches einem bestimmtem Kriterium entspricht:
#!/usr/bin/perl use strict; use warnings; use List::Util qw/first/; my @zahlen = qw/ 5 10 15 20 42 25 30 4 35 /; # Erstes Element des Array zahlen, das groesser als 10 ist my $first = first { $_ > 10 } @zahlen ; print "First: $first\n";
Das Programm erzeugt folgende Ausgabe:
First: 15
Reduce - Eine Liste auf einen einzelnen Wert reduzieren
Die Funktion reduce() erzeugt aus einer Liste einen einzelnen Wert.
Den beiden speziellen Variablen $a und $b wird im ersten Durchlauf von reduce() die ersten beiden Elemente der Liste zugeordnet. In jedem weiteren Lauf wird das Ergebnis des vorherigen Laufs der Variablen $a zugeordnet und das nächste Element der Liste der Variablen $b.
#!/usr/bin/perl use strict; use warnings; use List::Util qw/reduce/; my @zahlen = qw/ 5 10 15 20 42 25 30 4 35 /; { no warnings; # Keine Warnungen in diesem Block my $produkt = reduce { $a * $b } @zahlen; print "Produkt 1: $produkt\n"; $produkt = 5 * 10 * 15 * 20 * 42 * 25 * 30 * 4 * 35; print "Produkt 2: $produkt\n"; }
Um die gut gemeinten Warnungen bzzgl. $a und $b zu unterdrücken, werden Warnungen innerhalb eines nackten Blocks begrenzt unterdrückt.
Das Programm erzeugt folgende Ausgabe:
Produkt 1: 66150000000 Produkt 2: 66150000000
MoreUtils
Weitere hilfreiche Tools für Listen stellen List::MoreUtils und List::AllUtils bereit.
Siehe auch:
- CPAN: List::Util
- CPAN: List::MoreUtils
- CPAN: List::AllUtils
- Perl Training Australia: List::Util
- devshed: Perl Lists: Utilizing List::Util
- Perl 2001 Advent Calendar: List::Util
- perlfaq4 - perldoc.perl.org
- Linux Magazine Column 58 (Apr 2004)
- perl.com: Hidden Treasures of the Perl Core, part II