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:

Weitere Posts