Siechfred: liste auswerten

Beitrag lesen

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.