大小写无关排序
Posted
技术标签:
【中文标题】大小写无关排序【英文标题】:Case independent sorting 【发布时间】:2013-06-20 18:21:45 【问题描述】:如何按键排序哈希表(语音)
我的意思是,如果哈希表中有 3 个键(称为%tags
),"MWE", "wPrefix", "conjunction"
,如果我使用常规排序:
foreach $tag (sort keys %tags)
print "$tag\n";
我得到的输出是:
MWE
conjunction
wPrefix
但输出应该是:
conjunction
MWE
wPrefix
【问题讨论】:
我相信您的意思是“不区分大小写”排序而不是“语音”排序。如果没有,那么您必须指定将单词转换为语音表示的首选方法。 【参考方案1】:使用块代码进行排序功能,比较每个项目的大写:
foreach $tag (sort uc($a) cmp uc($b) keys %tags)
print "$tag\n";
@Dave Sherohman 指出,这是一种不区分大小写的排序
【讨论】:
值得指出的是,Perl v16 有一个适当的大小写折叠功能,可以与完整的 Unicode 字符集公正地工作。你需要use feature 'fc'
(或use 5.016
),然后是fc $a cmp fc $b
。
@Borodin 确实如此;在某些情况下使用uc
而不是fc
会产生错误的答案。此外,即使这样也不能对校对难以理解的非外壳项目给出合理的结果。相对于字母,数字在哪里?各种符号和标点符号等呢?
fc
也可以通过安装Unicode::CaseFold 在早于 5.16(但至少为 5.8.1)的 Perls 上使用。以上是关于大小写无关排序的主要内容,如果未能解决你的问题,请参考以下文章