digi: Arrays vergleichen

HI zusammen,

wie kann ich denn elegant/ressourcenschonend zwei Arrays miteinander auf "Doubletten" vergleichen?
Bsp:
@a = (1,5,10,466,1226,22222,...);
@b = (17,65,155,466,1453,5000,22222,...);
Und nun möchte ich eben, dass er mir 466, 22222, usw. ausgibt.
Ich wüsste wie ich es machen könnte, wenn ich einfach 2 foreach-Schleifen gegeneinander laufen lasse, aber ich glaub, dass geht auch besser. Hat jemand ne Idee?
Danke.

cu
digi

  1. Hi digi
    eine foreach-Schhleife müsste doch reichen.

    Du prüfst einfach jeden Wert aus @a ob er in @b vorhanden ist.

    Und wenn Du vorher noch weisst,
    welches Array kleiner ist,
    dann nimmst Du halt das.

    Gruss, Frank

  2. wie kann ich denn elegant/ressourcenschonend zwei Arrays miteinander auf "Doubletten" vergleichen?

    How do I compute the difference of two arrays? How do I compute the intersection of two arrays?

    Struppi.

    1. Hi,

      wie kann ich denn elegant/ressourcenschonend zwei Arrays miteinander auf "Doubletten" vergleichen?

      How do I compute the difference of two arrays? How do I compute the intersection of two arrays?

      Struppi.

      Danke erstmal.
      Aber ich verstehe den Inkrement $count{$element}++ nicht. Wird da der Inhalt von array1[0] bis array2[letztes Element] immer um eins hochgezählt? Und wenn ja, wohin wird es gespeichert?

      ciao,
      digi

      1. Aber ich verstehe den Inkrement $count{$element}++ nicht. Wird da der Inhalt von array1[0] bis array2[letztes Element] immer um eins hochgezählt? Und wenn ja, wohin wird es gespeichert?

        Nein, die Elemente werden als Schlüssel in dem HASH %count gespeichert und das vorkommen gezählt. Kommt ein Element zweimal vor ist es in beiden Arrays.

        Struppi.

      2. Hallo digi,

        Aber ich verstehe den Inkrement $count{$element}++ nicht. Wird da der Inhalt von array1[0] bis array2[letztes Element] immer um eins hochgezählt? Und wenn ja, wohin wird es gespeichert?

        Nun die foreach-Schleife geht alle Elemente _beider_ Arrays durch (die beiden werden aneinandergehängt). Dann wird für jedes Element ein neuer Schlüssel im anfangs leeren Hash %count angelegt. Der Wert wird auf 1 gesetzt (0+1). Ist allerdings schon ein Schlüssel vorhanden, d.h. das Arrayelement kam schon mal vor, wird der Wert um eins erhöht. Somit erhält man z.B. sowas:
        @arr1 = (1,2,3,1);
        @arr2 = (2,4,5);
        %count = {
        "1" => 2,
        "2" => 2,
        "3" => 1,
        "4" => 1,
        "5" => 1
        }

        Grüße
        Jasmin