Thread Werte in Hash und gleichzeitig doppelte finden (14 answers)
Opened by rk-ger at 2007-01-01 23:46

bloonix
 2007-01-09 09:30
#72851 #72851
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=ptk,08.01.2007, 23:02]Nicht unfair, weil die grep-Variante gar kein @array braucht.[/quote]
Um die beiden Codestücke richtig zu testen, ist die Initialisierung des
Arrays auch in der Grep-Variante notwendig, denn auch die Grep Variante
benötigt das Array für die Verarbeitung. Nur weil in der Shift-Variante der
Inhalt des Arrays geändert wird, heißt das nicht, das man die Initialisierung
getrost in der Grep-Variante weglassen kann. Das wäre falsch. Denn in
einer echten Verwendung der Grep-Variante würde sie ja auch nicht immer
wieder das gleiche Array verarbeiten, sondern ein neues zugewiesen
bekommen.

Grep-Variante
Code: (dl )
1
2
my %seen;
my @unique = grep { ! $seen{$_}++ } @array;


Shift-Variante
Code: (dl )
1
2
3
4
5
6
my (%seen, $string);
$seen{$string}++ while $string = shift @array;
for (keys %seen) {
  push @array, $_;
  delete $seen{$_};
}


Das sind die beiden Varianten, das Array ist aussen vor. Da man aber die
Shift Variante nicht Benchmarken kann, ohne das Array neu zu
initialisieren, da das Array "überschrieben" wird, muss die Initialisierung
auch zur Grep-Variante hinzugefügt werden, um ein Gleichgewicht zu
halten.\n\n

<!--EDIT|opi|1168328647-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread Werte in Hash und gleichzeitig doppelte finden