trinita: Problem: Element soll nur in Liste, wenn nicht bereits drin

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

  1. 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!

    --
    Never argue with an idiot. He will lower you to his level and then
    beat you with experience.
    1. Hallo Frank !

      Danke für den Tip, so ist es natürlich am elegantesten.

      Viele Grüße,
      Trinita