perl - 在 Perl 中重新排序字母排序

标签 perl sorting alphabetical

我正在尝试修复亚美尼亚字母表中的排序,因为所有标准的 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/

相关文章:

c - 按字母顺序或降序对多个数组进行排序

arrays - 在Perl中循环二维数组?

python - 删除无效括号

arrays - .sorted(by : ) method) 中的括号

.net - 按字母顺序对 ListView 的 ListViewGroup 进行排序

javascript - 什么是可以用来递增字母的方法?

perl - 我想更改我的默认 perl

linux - 如何使用 perl/a shell 脚本轻松检查 POP3 或 SMTP 连接是否有效?

windows - 运行Perl脚本通过DOS命令提示符调用网页?

mysql - 在mysql中按非字母顺序排序