2013-06-24 87 views
3

我怎麼排序哈希表的鍵(音素) 我的意思是,如果在哈希表(稱爲%tags)3個按鍵,"MWE", "wPrefix", "conjunction",如果我使用常規排序:案例獨立分揀

foreach $tag (sort keys %tags) { 
    print "$tag\n"; 
} 

我得到的輸出是:

MWE 
conjunction 
wPrefix 

但輸出應該是:

conjunction 
MWE 
wPrefix 
+6

我相信你說的是「不區分大小寫」排序而不是「語音」排序。如果不是,那麼你必須指定你的首選方法將單詞轉換成語音表示。 –

回答

6

使用塊代碼排序功能,每個項目的大寫比較:

foreach $tag (sort {uc($a) cmp uc($b)} keys %tags) { 
    print "$tag\n"; 
} 

這是不區分大小寫的排序,因爲@戴夫Sherohman指出

+3

值得指出的是,Perl的V16具有適當的情況下摺疊設施,與完整的Unicode字符集工作公正。你需要'使用的功能「fc''(或'使用5.016'),然後'FC美元CMP FC $ B'。 – Borodin

+0

@Borodin的確如此;肯定有使用'uc'而不是'fc'產生錯誤答案的情況。而且,即使如此,對於整理不好的非套裝物品也沒有合理的結果。數字在字母方面在哪裏?那麼各種符號和標點符號等呢? – tchrist

+0

'fc'也可在比皮爾斯5.16(但至少5.8.1)的年齡較大的通過安裝[Unicode的:: CaseFold](https://metacpan.org/pod/Unicode::CaseFold)。 – hobbs