Aufgabe. Im Programm in der Programmiersprache Perl gibt es eine Liste. In der Liste gibt es
Strings und zahlen. Brauchen, um eindeutige Werte aus dieser Liste.
Der einfachste Weg, um diese Aufgabe zu lösen ist die Verwendung
Funktion uniq
aus der Bibliothek List::Util
. Hier ist der Beispielcode:
▶ Run
use List::Util qw(uniq);
use Data::Dumper;
my @arr = uniq('one', 'one', 'b', 'one', 'b', 4);
print Dumper \@arr;
Wenn Sie diesen Text in die Datei script.pl
, und dann in der Konsole ausführen perl script.pl
,
dann erscheint auf dem Bildschirm:
$VAR1 = [
'one',
'b',
4
];
Funktion uniq
speichert die Reihenfolge der Elemente und es funktioniert einwandfrei wenn in der Liste gibt es undef
.
Dieser Code funktioniert Perl ab der Version 5.26. In früheren Versionen von Perl enthalten
Version der Bibliothek List::Util
in dem noch keine Funktion uniq
. Also, um
verwenden Sie diese Entscheidung müssen Sie entweder aktualisieren Perl, zu liefern oder eine neuere Version
Bibliothek List::Util
.
Hier ist ein Ausschnitt der Ausgabe des Befehls perldoc List::Util
über die Funktion uniq
:
uniq
my @subset = uniq @values
*Since version 1.45.*
Filters a list of values to remove subsequent duplicates, as judged by a
DWIM-ish string equality or "undef" test. Preserves the order of unique
elements, and retains the first value of any duplicate set.
my $count = uniq @values
In scalar context, returns the number of elements that would have been
returned as a list.
The "undef" value is treated by this function as distinct from the empty
string, and no warning will be produced. It is left as-is in the
returned list. Subsequent "undef" values are still considered identical
to the first, and will be removed.
Ziemlich einfach selbst schreiben Sie eine vereinfachte Variante der Funktion uniq
aus der Bibliothek List::Util
:
▶ Run
use Data::Dumper;
sub uniq {
my (@values) = @_;
my %h = map {$_ => 1} @values;
return keys %h;
}
my @arr = uniq('one', 'one', 'b', 'one', 'b', 4);
print Dumper \@arr;
Diesen Code sofort funktioniert auf jeder beliebigen Version von Perl. Hier sind drei Zeilen aus Saba uniq
:
Aber im Vergleich mit der Funktion uniq
aus der Bibliothek List::Util
bei diesem Code gibt es einen Fehler: