在線
foreach my $key (sort { $timeHash{$b} <=> $timeHash{$a} } keys %timeHash) {
print "\t$key\t\t $timeHash{$key}\n";
}
使用自定義排序功能,您試圖將無法正常工作的方式,因爲如果你的個子需要訪問原始的哈希值。
foreach my $key (sort hashValueDescendingNum (keys(%timeHash))) {
print "\t$key\t\t $timeHash{$key}\n";
}
sub hashValueDescendingNum {
$timeHash{$b} <=> $timeHash{$a}; # Ew.
}
相反,你可以抽象進一步:
foreach my $key (sortedHashKeysByValueDescending(%timeHash)) {
print "\t$key\t\t $timeHash{$key}\n";
}
sub sortedHashKeysByValueDescending {
my %hash = @_;
my @keys = sort { $hash{$b} <=> $hash{$a} } keys %hash;
return @keys;
}
的代碼是不是有效,因爲它傳遞%哈希圍繞不過,引用會更好:
foreach my $key (sortedHashKeysByValueDescending(\%timeHash)) {
print "\t$key\t\t $timeHash{$key}\n";
}
sub sortedHashKeysByValueDescending {
my $hash = shift;
return sort { $hash->{$b} <=> $hash->{$a} } keys %$hash;
}
在問題不是函數表示法,而是對'%timeHash'的引用...通常,我會寫'keys%timeHash',但我不認爲這個差異ce觸發你得到的錯誤。 –
確實如此,代碼中的其他地方還有其他錯誤。顯然%timeHash沒有聲明。 –
上面我有「我的$ timeHash = {}」 - 這是不正確的? – JDS