Problem: Element soll nur in Liste, wenn nicht bereits drin
trinita
- perl
Hallo Forum !
Ich möchte mit PERL einer Liste ein Element hinzufügen, aber nur dann, wenn nicht bereits ein gleichartiges Element enthalten ist. Dafür brauche ich etwas ähnliches wie die inarray()-Funktion von php. Wie löse ich das am kürzesten ?
Bisher sieht das bei mir so aus:
@types ist die Zielliste. Das neue Element ist $type.
Ich generiere also zunächst eine Liste @tempList, die alle Elemente aus @types enthält, die gleichartig mit $type sind:
my @tempList = grep($_ eq $type, @types);
Dann füge ich $type der Liste @types hinzu, aber nur, wenn die temporäre Liste @tempList leer ist:
push(@types, $type) if($#tempList == -1);
Ich würde das gerne in eine Zeile zusammenfassen. Habe schon mal folgendes ausprobiert:
push(@types, $type) if($#{ grep($_ eq $type, @types) } == -1);
Das funktioniert aber leider nicht (Warum ?).
Danke für die Hilfe,
Trinita
hi!
Ich möchte mit PERL einer Liste ein Element hinzufügen, aber nur
dann, wenn nicht bereits ein gleichartiges Element enthalten ist.
Verwende am einfachsten einen Hash, bei dem die Schlüssel als Werte
dienen. Neues Element einfügen:
$array{$element} = 1;
Alle Elemente auslesen:
@elements = keys %array;
In @elements ist jedes Element dann nur einmal vorhanden. Man kann
über $array{$element} auch leicht abfragen, ob das Element bereits
vorhanden ist.
bye, Frank!
Hallo Frank !
Danke für den Tip, so ist es natürlich am elegantesten.
Viele Grüße,
Trinita