请问如何通过对一个hash值的排序得到key的排序

请问如何通过对一个hash值的排序得到key的排序

比如定义一个hash

my %hash = ( "personA" => 20,
                       "personB" => 10,
                       "personC" => 20
                     )
通过对hash的value的排序10,20,20 得到key的排序 即 personB,personA,personC
请问如何才能做到,谢谢
不好意思,刚才没有注明value的值不是各不相同的



QUOTE:
原帖由 UC_hmf 于 2007-12-12 10:36 发表
比如定义一个hash

my %hash = ( "personA" => 20,
                       "personB" => 10,
                       "personC" => 30
                     )
通过对hash的value的排序10,20,30 得到k ...

my%hash=(
   "personA"=>20,
   "personB"=>10,
   "personC"=>30,
);

sub by_hash{
    $hash{$a}<=>$hash{$b};
}

@result = sort by_hash keys%hash;

print "@result \n";
在哈希表中通过键来确定数值,但是反过来是不行的。所以对于这个问题,可以考虑调换原哈希表的键和数值,临时存储到另一个哈希表中

%rhash = reverse %hash;

foreach $key (sort keys %rhash) {
    print "$key => $rhash{$key}", "\n";
}
use strict;

my %hash;
%hash=( "personA" => 20,
                       "personB" => 10,
                       "personC" => 30
                     );
my @sort=sort  {$hash{a} <=> $hash{b}} keys %hash;
print "@hash\n";
忘了注明一点了,原hash中的值可能有重复