通常排序依據鍵值,然後迭代散列是可以做到以下幾點:簡單的方法進行排序基於值在哈希在Perl
for $k (sort (keys %h)) {
print $k, $h{$k};
}
但如何做基於價值排序,然後迭代散列?我可以考慮通過交換鍵和值對來創建一個新的散列。但是,有沒有更聰明的方式來做到這一點?
非常感謝。
通常排序依據鍵值,然後迭代散列是可以做到以下幾點:簡單的方法進行排序基於值在哈希在Perl
for $k (sort (keys %h)) {
print $k, $h{$k};
}
但如何做基於價值排序,然後迭代散列?我可以考慮通過交換鍵和值對來創建一個新的散列。但是,有沒有更聰明的方式來做到這一點?
非常感謝。
如果你想的那種比較是其他東西比cmp
,你可以提供一個代碼塊或子程序作爲第一個參數來sort
。有關更多詳情,請參閱the documentation。
my %h = (
aaaa => 'z',
bbb => 'x',
c => 'y',
);
# Sort on hash values.
for my $k (sort {$h{$a} cmp $h{$b}} keys %h) {
print $k, "\n"; # bbb c aaaa
}
# Sort using a named subroutine.
for my $k (sort by_length keys %h) {
print $k, "\n"; # c bbb aaaa
}
sub by_length {
length($a) <=> length($b);
}
How do I sort a hash (optionally by value instead of key)?
如果你打算用Perl編程,那麼你應該真正把閱讀FAQ的時間。
這由值代替關鍵
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;
這並基於價值排序排序%年齡哈希值。 欲瞭解更多詳情,請參閱Perl的文件:
的perldoc排序Q:我如何(按價值計算,而不是關鍵可選)排序的哈希? – tadmc 2011-05-12 02:39:44