2013-06-24 43 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