2011-05-12 96 views
2

通常排序依據鍵值,然後迭代散列是可以做到以下幾點:簡單的方法進行排序基於值在哈希在Perl

for $k (sort (keys %h)) { 
    print $k, $h{$k}; 
} 

但如何做基於價值排序,然後迭代散列?我可以考慮通過交換鍵和值對來創建一個新的散列。但是,有沒有更聰明的方式來做到這一點?

非常感謝。

+2

的perldoc排序Q:我如何(按價值計算,而不是關鍵可選)排序的哈希? – tadmc 2011-05-12 02:39:44

回答

5

如果你想的那種比較是其他東西比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); 
}