我正在尝试修复亚美尼亚字母表中的排序,因为所有标准的 Unix 工具和编程语言都对字母和单词进行排序,结果只有 2 种主要方言(西方)中的一种。
将其转换为技术问题是重新排序其中一个字符“ ւ ”,将其放在字母之间的不同位置,假设将其设为最后一个字符,以便单词按顺序正确排序方言(东方)。从东方方言的语言上讲,这个“ ւ ”符号不是“独立”,而是用 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::Locale模块如果你还没有这样做。
use Unicode::Collate::Locale;
my $collator = Unicode::Collate::Locale->new(locale => "hy");
@sortd = $collator->sort(@unsortd);
print join("\n", @sortd, '');
这打印:
ու
ոց
ոք
ոփ
(我不确定这是否是您期望的输出,但该模块和
Unicode::Collate
包含大量信息,基于此创建自定义排序规则可能更容易,而不是滚动您自己的排序规则。 )
关于perl - 在 Perl 中重新排序字母排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627371/