Doppelte Elemente aus Array entfernen - Und die Reihenfolge beibehalten
Aufgrund einer Leseranfrage, wie man denn doppelte Elemente eines Arrays entfernen kann, die Reihenfolge aber beibehalten werden soll, hier mein kleiner Lösungsvorschlag.
Mit Hash-Slices und so hat dies nichts zu tun, vielmehr wird grep verwendet.
Das Array @a wird also durch das grep geschleust.
Dabei wird einem Hash $hash ein Element hinzugefügt, nämlich den Wert des aktuellen Wertes aus @a. Dieser Hash-Wert wird um 1 erhöht, und wenn dieser Wert KLEINER 2 ist, wird der aktuelle Wert aus @a dem neuen Array @new hinzugefügt.
Tritt ein doppelter Wert auf, so war der Hash-Wert schon 1, wird also zu 2 und wird von dem grep nicht in das neue Array eingefügt.
Eine schnellere Methode fällt mir im Moment nicht ein, vielleicht weiß ein Leser eine effizientere Methode?
In diesem Sinne...
Kommentare zum Beitrag "Doppelte Elemente aus Array entfernen - Und die Reihenfolge beibehalten!"
Kommentar von Renée Bäcker
Das grep würde ich noch etwas umbauen...
@a=qw(7 1 2 3 4 5 7 4 6 7 8 9 10);
@new=grep{!$hash{$_}++;} @a;
print join("\n",@new);
Das "not" (!) wird *vor* dem Inkrement gemacht. Somit ist der Ausdruck