【发布时间】:2011-10-02 15:50:19
【问题描述】:
我正在尝试修复亚美尼亚字母表中的排序问题,因为所有标准 Unix 工具和编程语言都会对字母和单词进行排序,结果只有 2 种主要方言(西方)中的一种。
将其转换为技术问题是重新排序一个字符“ւ”,将其放在字母之间的不同位置,假设将其设为最后一个字符,以便单词排序正确的顺序方言(东部)。从东方方言的语言上讲,这个“ւ”符号不是“独立的”,而是用两个字符“ու”书写的字母的一部分。当前排序将字母“ու”放在“ոք”或“ոփ”两个字母结构之后。
基本上,如果你想制作 e,它应该是完全相似的。 G。字母“v”在拉丁字母中代替字母“z”。
我正在尝试使用类似的东西
#!/usr/bin/perl -w
use strict;
my (@sortd, @unsortd, $char_u, $char_x);
#@unsortd = qw(աբասի ապուշ ապրուստ թուր թովիչ թոշակ թոք);
@unsortd = qw(ու ոց ոք ոփ);
@sortd = sort {
$char_u = "ւ";
$char_x = split(//, @unsortd);
if ($char_u gt $char_x) {
1;
} else {
return $a cmp $b;
}
} @unsortd;
print "@sortd\n";
但这并不适用于整个单词,只有 2 个字母形式是固定的。
更新:我能够使用 tr 函数将字母映射到数字来解决这个问题,如 Perlmonks
所示【问题讨论】:
-
您永远不应该使用代码点比较对文本进行排序;它永远不会是正确的。这就是
Unicode::Collate和Unicode::Collate存在的原因。
标签: perl sorting alphabetical