hash-sortierung mit values
micha
- perl
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
$data = "
#name,size,time
name1,1,1
name2,1,2
name3,2,1
";
$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;
print "ID\tNAME\tSIZE\tTIME\n";
foreach (@print) {
$id = $_;
print "$id\t$data{$id}{name}\t$data{$id}{size}\t$data{$id}{time}\n";
}
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
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