micha: hash-sortierung mit values

Hallo!

Mein Problem:
ich will eine liste einlesen und dann mit verschiedenen sortierungen ausgeben. jeder datensatz kann über eine eindeutige ID abgerufen werden. wenn ich z.B nach größe sortieren will, sollte nach der sortierung ein array mit den vorsortierten IDs entstehen, das dann abgearbeitet wird. ich könnte ja einen neuen hash erstellen a la $tmp{$size} = $id; und dann mit @print = sort { $a <=> $b; } values %tmp; das gewünschte array erhalten. das dumme ist nur, das die größe ja mehrfach vorkommen kann und als schlüssel für einen hash nicht mehr taugt...

zur verdeutlichung hier das skript:

------------------------------------------

#!/usr/bin/perl

der improvisierte datensatz

$data = "
#name,size,time
name1,1,1
name2,1,2
name3,2,1
";

den datensatz einlesen und in der struktur

$data{id}{key} = value

speichern

$id = 1;
@datasets = split /\n/, $data;
foreach (@datasets) {
    next if $_ eq '' or $_ =~ /^#/;
    (   $data{$id}{name},
 $data{$id}{size},
 $data{$id}{time}
    ) = split /,/, $_;

$id++;
}

@print = keys %data;

bei der ausgabe soll nur noch ein vorsortiertes

array abgearbeitet werden, das die id der datensätze

enthält

print "ID\tNAME\tSIZE\tTIME\n";
foreach (@print) {
    $id = $_;
    print "$id\t$data{$id}{name}\t$data{$id}{size}\t$data{$id}{time}\n";
}

jetzt so, wie ich es die ganze zeit

versuche, was natürlich nicht klappt

foreach $id (keys %data) {
 print "$data{$id}{name}\t$data{$id}{size}\n";
 $tmp{ $data{$id}{size} } = $id;
}

@print = sort { $b <=> $a } values %tmp;

print "ID\tNAME\tSIZE\tTIME\n";
foreach (@print) {
    $id = $_;
    print "$id\t$data{$id}{name}\t$data{$id}{size}\t$data{$id}{time}\n";
}

---------------------------------------------------

falls irgendjemand eine idee hat, würde ich mich tierisch drüber freuen

ciao
micha

  1. ups, hat sich schon von selbst erledigt, und eh alle schimpfen, hier die (verdammt nochmal so simple) lösung:

    http://forum.de.selfhtml.org/archiv/2003/1/35397/#m193018

    ciao
    micha