Uniq: Warum funktioniert dieser Schnippel

30/06/2013 - 12:33 von Andre Tann | Report spam
Hallo zusammen,

Um eine Liste von Doubletten zu befreien, hat mir googeln folgenden Schnippel erbracht:

my %seen;
my @unique = grep { ! $seen{$_}++ } @somearray;

Nun würde ich gerne verstehen, was da passiert, und wieso es funktioniert. In %seen sind anschließend alle Werte aus @somearray als Keys, und als Werte die Anzahl, wie oft der Wert vorgekommen ist. Aber wie kommen die Werte aus @somearray in %seen hinein, indem ich danach (wonach?) greppe? Wo passiert die Zuweisung?

Wàre nett, wenn mir das jemand auseinandersetzen könnte.

Andre Tann
 

Lesen sie die antworten

#1 Bjoern Hoehrmann
30/06/2013 - 12:44 | Warnen spam
* Andre Tann wrote in de.comp.lang.perl.misc:
Um eine Liste von Doubletten zu befreien, hat mir googeln folgenden
Schnippel erbracht:

my %seen;
my @unique = grep { ! $seen{$_}++ } @somearray;

Nun würde ich gerne verstehen, was da passiert, und wieso es
funktioniert. In %seen sind anschließend alle Werte aus @somearray als
Keys, und als Werte die Anzahl, wie oft der Wert vorgekommen ist. Aber
wie kommen die Werte aus @somearray in %seen hinein, indem ich danach
(wonach?) greppe? Wo passiert die Zuweisung?



Das `++` erhöht den voranstehenden Wert um eins, wobei für nicht vor-
handene Werte der Wert Null angenommen wird. Man kann es sich so vor-
stellen:

... grep {
my $old_value = $seen{$_};
$seen{$_} += 1;
not $old_value;
} ...
Björn Höhrmann · mailto: · http://bjoern.hoehrmann.de
Am Badedeich 7 · Telefon: +49(0)160/4415681 · http://www.bjoernsworld.de
25899 Dagebüll · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Ähnliche fragen