tim: Element in Array einfügen WENN NICHT vorhanden

Hallo!
Wie kann ich ein Element in ein Array einfügen, wenn es nicht schon im Array vorhanden ist?

Ganz konkret: In einer while-Schleife bekomme ich z.B. 20 mal $beispiel="hallo", 30 mal $beispiel="problem" und 10 mal $beispiel="hilfe".

Im Array soll aber nur stehen:
@beispielarray=("hallo","problem","hilfe");

Gibt es da eine einfache Lösung?

Vielen Dank!!!!

  1. Hallo tim,

    Ganz konkret: In einer while-Schleife bekomme ich z.B. 20 mal $beispiel="hallo", 30 mal $beispiel="problem" und 10 mal $beispiel="hilfe".

    Im Array soll aber nur stehen:
    @beispielarray=("hallo","problem","hilfe");

    also ich würde .. als eine von vielen möglichen Lösungen .. erst einmal einen Hash aufbauen und dann in ein Array überführen

    z.B. (auchtung - ungetesteter code!):

    my %h;
    while (...) {
       $beispiel = ....;
       $h{$beispiel} = 1;
        }
    my @beispielarray = keys(%h);

    Grüße
       K@rl

    1. hi,

      also ich würde .. als eine von vielen möglichen Lösungen .. erst einmal einen Hash aufbauen und dann in ein Array überführen

      jow, die Idee ist gut:
      Es geht auch kürzer
      http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.1.3

      Gruß, Rolf

      z.B. (auchtung - ungetesteter code!):

      my %h;
      while (...) {
         $beispiel = ....;
         $h{$beispiel} = 1;
          }
      my @beispielarray = keys(%h);

      Grüße
         K@rl

      1. hi,

        also ich würde .. als eine von vielen möglichen Lösungen .. erst einmal einen Hash aufbauen und dann in ein Array überführen

        jow, die Idee ist gut:
        Es geht auch kürzer
        http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.1.3

        es geht noch kürzer ;-)

        Array mit duplikaten

        @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);

        my %uni;

        @uni{@ar} = ();

        hash (nur die keys) ausgeben

        print join "\n", sort keys %uni;

        Struppi.

        1. wow Struppi!

          das ist gut... hast Du Lust auf der PerlBase ab und zu mal was einzupflegen und den Content zu managen?

          Ehrenamtlich, unverbindlich usw...

          Viele Grüße, Rolf

          also ich würde .. als eine von vielen möglichen Lösungen .. erst einmal einen Hash aufbauen und dann in ein Array überführen

          jow, die Idee ist gut:
          Es geht auch kürzer
          http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.1.3

          es geht noch kürzer ;-)

          Array mit duplikaten

          @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);

          my %uni;

          @uni{@ar} = ();

          hash (nur die keys) ausgeben

          print join "\n", sort keys %uni;

          Struppi.

          1. wow Struppi!

            das ist gut... hast Du Lust auf der PerlBase ab und zu mal was einzupflegen und den Content zu managen?

            Ich fühle mich geehrt, aber das ist ehrlich gesagt nicht von mir, sondern aus der perlfaq.
            Und ich tu mich mit slices selber auch noch schwer.

            Aber stimmt, es ist gut ;-)

            Ehrenamtlich, unverbindlich usw...

            Hab leider (oder zum Glück) schon so ein Projekt, was man restliche Zeit (die ich nicht hier verbringe) aufzehrt.

            Struppi.

            1. hi Struppi,

              schade,

              Hab leider (oder zum Glück) schon so ein Projekt, was man restliche Zeit (die ich nicht hier verbringe) aufzehrt.

              naja, was solls, an _der_ Krankheit leiden wir alle.

              Viele Grüße, Rolf

  2. Ich habe gerade selbst noch eine prima Lösung mit GREP gefunden:

    Innerhalb der while-Schleife:

    if (!grep(/$beispiel/,@beispielarray)) {
         push(@beispielarray,$beispiel);
    }

    Es werden nun nur Elemente ins Array geschrieben, die noch nicht darin vorhanden sind.

    1. hi tim,

      Innerhalb der while-Schleife:

      if (!grep(/$beispiel/,@beispielarray)) {
           push(@beispielarray,$beispiel);
      }

      funzt natürlich; bei einem langen @beispielarray kann das aber gegenüber den anderen vorgeschlagenen Lösungen **ganz erheblich** länger dauern.

      Grüße
         K@rl

  3. Hallo!
    Wie kann ich ein Element in ein Array einfügen, wenn es nicht schon im Array vorhanden ist?

    Ganz konkret: In einer while-Schleife bekomme ich z.B. 20 mal $beispiel="hallo", 30 mal $beispiel="problem" und 10 mal $beispiel="hilfe".

    Im Array soll aber nur stehen:
    @beispielarray=("hallo","problem","hilfe");

    Gibt es da eine einfache Lösung?

    #!/usr/bin/perl

    my %hash;
    @hash{"hallo","problem","hilfe"} = ();

    my @input = ("hallo","problem","hilfe", "hallo","problem","hilfe","hallo","problem","hilfe");

    foreach(@input)
    {
        $hash{$_}++;
    }

    foreach(keys %hash)
    {
       print "$_ kam $hash{$_} mal vor.\n";
    }