2014-01-30 66 views
0

是否有任何方法通過僅使用子集(最後兩個字符)來對散列鍵進行排序?通過在Perl中採用子集對散列鍵進行排序

如:

$VAR1 = { 
     'OCT12' => 1, 
     'JAN13' => 4, 
     'JAN14' => 39, 
     'SRF14' => 1, 
     'OCN13' => 64, 
     'SBF14' => 80, 
     'DEC13' => 22, 
}; 

我期待着得到輸出: 「OCT12」, 「JAN13」, 「OCN13」, 「DEC13」, 「JAN14」, 「SRF14」。

乾杯, 何塞

+3

不能 「排序哈希鍵」。你可以對一個數組進行排序,你可以從'keys%hash'中得到這個數組。 –

+0

另外,由於哈希沒有訂單,因此不會預測重複鍵的順序(例如,可以按任意順序列出JAN13,OCN13和DEC13)。 – cjm

+0

@cjm Hashes中沒有重複的鍵。 –

回答

6
sort { substr($a, -2) cmp substr($b, -2) } keys(%$VAR1) 

如果你想通過第一部分分揀打破平局,

sort { substr($a, -2) cmp substr($b, -2) || $a cmp $b } keys(%$VAR1) 
5
my @sorted_keys = 
    map $_->[0], 
    sort { $a->[1] <=> $b->[1] } 
    map [$_, /(\d+)$/], 
    keys %h; 
相關問題