sorting - Perl 以特殊方式对 Alpha 字符进行排序
问题描述
我知道这个问题可能已经被问了一百万次,但我很难过。我有一个要排序的数组。我想要得到的结果是
A
B
Z
AA
BB
可用的排序例程不会以这种方式排序。我不确定是否可以做到。这是我的 perl 脚本和我正在做的排序。我错过了什么?
# header
use warnings;
use strict;
use Sort::Versions;
use Sort::Naturally 'nsort';
print "Perl Starting ... \n\n";
my @testArray = ("Z", "A", "AA", "B", "AB");
#sort1
my @sortedArray1 = sort @testArray;
print "\nMethod1\n";
print join("\n",@sortedArray1),"\n";
my @sortedArray2 = nsort @testArray;
print "\nMethod2\n";
print join("\n",@sortedArray2),"\n";
my @sortedArray3 = sort { versioncmp($a,$b) } @testArray;
print "\nMethod3\n";
print join("\n",@sortedArray3),"\n";
print "\nPerl End ... \n\n";
1;
输出:
Perl Starting ...
Method1
A
AA
AB
B
Z
Method2
A
AA
AB
B
Z
Method3
A
AA
AB
B
Z
Perl End ...
解决方案
我认为您想要的是按长度排序,然后按序数排序。这很容易通过以下方式进行管理:
my @sortedArray = sort {
length $a <=> length $b ||
$a cmp $b
} @testArray;
这与英语完全一样:根据 a 与 b 的长度排序,然后按 a 与 b 的比较。
推荐阅读
- mysql - 查询相似短语
- javascript - JavaScript `降低`性能
- .net - Visual Studio 2015,OneDrive - aspx.vb 页面需要从 OneDrive 访问文件
- c# - 使用 MSTest 作为测试框架时是否可以使测试方法通用?
- regex - 正则表达式搜索包含其他短语的短语并且不标记其他任何内容
- reactjs - 如何在 React 中渲染递归组件?
- debian - debuild - 依赖集但没有版本
- java - 更新 SQLite 数据库 Android RecyclerView 迭代
- javascript - Javascript递归回溯数独求解器
- php - 当 $stmt->execute() 使我的 apache 服务器崩溃时,如何输出 MySQLi $stmt?