Ted: Doppelte Elemente in einer Liste

Hi,

wie wir alle wissen, kann ich mit

undef %saw;
@out = grep(!$saw{$_}++, @in);

die doppelten Elemente einer Liste herausfiltern.

Wie kann ich mir aber diese doppelten Elemente anzeigen lassen, oder in eine @dopp schreiben lassen?

Grüß Euch

Ted

  1. Hi,

    wie wir alle wissen, kann ich mit

    undef %saw;
    @out = grep(!$saw{$_}++, @in);

    die doppelten Elemente einer Liste herausfiltern.

    Wie kann ich mir aber diese doppelten Elemente anzeigen lassen, oder in eine @dopp schreiben lassen?

    Grüß Euch

    Ted

    Hi,

    ich ahbe selber eine Lösung gefunden:

    foreach $key (sort { $a <=> $b } keys %saw) {
    if ($saw{$key} > 1) {
    print "$key";
    }
    }

    Trotzdem die frage, gibt es eine effizientere???

    Ted

    1. Moin!

      Trotzdem die frage, gibt es eine effizientere???

      Effizienter ist es wohl kaum, aber
        @dopp = grep($saw{$_}>1, keys(%saw));
      sollte auch ok sein. Man darf sich ueberlegen, ob man vor das keys noch ein sort schreiben will. Nachteil dabei ist, dass die tatsaechlichen Anzahlen der Mehrfachvorkommen nicht uebernommen werden, allerdings kann man die ja noch in %saw nachschauen (die Werte aus @dopp als Key verwenden).

      So long

      1. Moin!

        Trotzdem die frage, gibt es eine effizientere???

        Effizienter ist es wohl kaum, aber
          @dopp = grep($saw{$_}>1, keys(%saw));
        sollte auch ok sein. Man darf sich ueberlegen, ob man vor das keys noch ein sort schreiben will. Nachteil dabei ist, dass die tatsaechlichen Anzahlen der Mehrfachvorkommen nicht uebernommen werden, allerdings kann man die ja noch in %saw nachschauen (die Werte aus @dopp als Key verwenden).

        So long

        Jep, klar, hätte ich auch drauf kommen können :-) Aber Du hast Recht, es ist halt ne andere Lösung, aber interessehalber durchaus lesenswert.

        Danke

        Ted