Thread einmalige Eintraege in einer Liste filtern
(9 answers)
Opened by Gemuese at 2009-08-19 13:43
Ich finde es besser, die Zeile im Kontext zu betrachten:
Code (perl): (dl
)
1 2 3 4 my %seen; $seen{$_}++ for @list; my @single = grep{ $seen{$_} == 1 }keys %seen; Zunächst wird jedes Element aus @list als Schlüssel im Hash %seen eingetragen und der jeweilige Wert um eins erhöht. Somit hast Du in %seen nun eine Zuordnung zwischen Elementname und der Anzahl, wie häufig dieser Name in @list vorkommt. Die letzte Zeile ist von rechts nach links zu lesen: - es werden erstmal alle Schlüssel des Hashs %seen ausgelesen - dann werden mit grep jene Elemente erfasst, die im Hash mit einem Wert von genau 1 registriert sind - die Ergebnisliste des grep wird dann @single zugewiesen Damit hast Du letzten Endes genau die Elemente aus @list ermittelt, die genau einmal in @list vorkommen. Wenn Du das "== 1" durch ">= 1" kriegst Du alle Elemente, die mindestens einmal in @list vorkommen (Der Wert von $seen{$_} ist größer oder gleich 1). Dieser Vergleich ist dann aber überflüssig, wie pq bereits anmerkte. Damit ein Schlüssel im Hash %seen auftauchen kann, muss er wenigstens einmal in @list vorhanden gewesen sein. Damit reicht es aus, sich einfach nur die Schlüssel des Hashes ausgeben zu lassen. HTH, Linuxer meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |