Bernhard: Daten aus einem array korrigieren

Hallo,

die Lösung für mein Problem ist bestimmt ganz einfach, aber ich stehe
total auf dem Schlauch.

Ich habe ein Array mit folgendem Inhalt:

Name1&1000&10&1.0
Name2&2000&20&1.0
Name3&1500&15&1.3
Name4&5000&10&1.4
Name5&2300&12&1.4
.
.
.

Jetzt möchte ich, dass die Zahlen des zweiten Elementes addiert werden, wenn das vierte Element gleich ist und in einem neuen Array
eingelesen werden.
Also so:

3000&1.0
1500&1.3
7300&1.4

Die anderen Elemente sind für die weitere Berechnung uninteressant.

Schon mal vielen Dank im voraus !

Bernhard

  1. Hi,

    Jetzt möchte ich, dass die Zahlen des zweiten Elementes addiert werden, wenn das vierte Element gleich ist und in einem neuen Array
    eingelesen werden.

    tut's auch ein Hash? Ich würde das etwa folgendermaßen machen (ungetestet):

    my %ergebnis;
    foreach (@lines) {
      chomp; # wenn Du die Daten aus einer Datei ausgelesen hast (z.B), haben sie alle noch ein Newline am Ende
      my @temp = split(/&/, $_);
      $ergebnis{$temp[3]) += $ergebnis{$temp[1]};
    }

    Ausgabe:

    foreach (keys %ergebnis) {
      print $_, ': ', $ergebnis{$_}, "\n";
    }

    Cheatah

  2. hi!

    Ich habe ein Array mit folgendem Inhalt:

    Name1&1000&10&1.0
    Name2&2000&20&1.0
    Name3&1500&15&1.3
    Name4&5000&10&1.4
    Name5&2300&12&1.4
    .
    Jetzt möchte ich, dass die Zahlen des zweiten Elementes addiert werden, wenn das vierte Element
    gleich ist und in einem neuen Array eingelesen werden.

    Man verwende ein Hash und das vierte Element als Schlüssel.

    === cut ===
    my %hash;
    for (@array)
    {
      my (undef, $value, undef, $key) = split /&/;
      $hash{$key} += $value;
    }
    === cut ===

    Um aus dem Hash eine Liste zu machen:

    === cut ===
    for (keys %hash)
    {
      push @newarray, "$hash{$_}&$_"
    }
    === cut ===

    bye, Frank!