大小写无关排序

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 上使用。

以上是关于大小写无关排序的主要内容,如果未能解决你的问题,请参考以下文章

保留 cell.imageView 的大小,与图像大小无关

JComponent 大小与屏幕大小无关

JavaScript:与文化无关、不区分大小写的字符串比较

4.3 每日一练

JSON 字符串数据大小平台无关

Android中文本的与比例无关的像素字体大小