Lina: liste auswerten

hallo,

ich habe eine Liste, wo die Elemente sich wiederholen. Ich will alle gleiche Elemente addieren. Z.B.:
eine Liste:
1 a
1 b
2 a
3 c
2 b

es soll als Ergebnis

3 a
3 b
3 c

rauskommen.
Ich habe versucht zu schreiben, aber irgendwie komme nicht weiter.

Die Schleife:

my @woerter=<IN>;
my%liste;

foreach $value(@woerter){
if (exists $liste{$value}){
($key, $value)=split(//);
$liste{$value}+={$key};
}
}

Vielen Dank für Hilfe,
Lina

  1. eine Liste:
    1 a
    1 b
    2 a
    3 c
    2 b

    Die Arrayelemente bestehen aus einer Zahl und einem Buchstaben, die durch ein Semikolon getrennt sind? Oder hast du einen Hash?

    Ich habe versucht zu schreiben, aber irgendwie komme nicht weiter.

    Versuchst du evtl., Wörter zu zählen?

    foreach $value(@woerter){
    if (exists $liste{$value}){
    ($key, $value)=split(//);
    $liste{$value}+={$key};
    }
    }

    Aha, und wo ist der else-Zweig? So wird nie ein Element angelegt und %liste wird immer leer sein. Und warum setzt du um $key geschweifte Klammern? Und da fehlen ein paar my.

    Wie du es jetzt genau machst, hängt von deiner Datenstruktur ab, mal als Denkanstoß:

    my @arr = qw(1a 1b 2a 3c 2b);  
    my %list;  
    $list{ (split //)[1] } += (split //)[0] foreach @arr;
    

    Die ersten zwei Zeilen sind sicher nicht erklärungsbedürftig. Zeile 3 wird für jedes Arrayelement ausgeführt, und zwar wird hier die Autivivikation genutzt (nicht existente Elemente werden beim ersten Zugriff angelegt), das erspart dir das komplette if-else-Konstrukt. Und weil du die Einzelwerte der split-Operation nicht zwischenspeichern willst, kannst du sie gleich so verwenden, wie du sie letztlich haben willst: Den zweiten Wert als Hash-Schlüssel und den ersten Wert für eine simple Addition.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. eine Liste:
      1 a
      1 b
      2 a
      3 c
      2 b

      Die Arrayelemente bestehen aus einer Zahl und einem Buchstaben, die durch ein Semikolon getrennt sind? Oder hast du einen Hash?

      Ich habe versucht zu schreiben, aber irgendwie komme nicht weiter.

      Versuchst du evtl., Wörter zu zählen?

      Hallo,

      ja. Arrayelemente sind im Hash. Zahl und Buchstabe sind durch Whitespice getrennt. Ich will die wörter zählen und deren Zahlen summieren.

      Gruß,
      Lina

      1. ja. Arrayelemente sind im Hash. Zahl und Buchstabe sind durch Whitespice getrennt. Ich will die wörter zählen und deren Zahlen summieren.

        Dann sollte mein kleines Beispiel zielführend sein.

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
        1. Genau. Danke Dir.
          Lina