Arrays 为什么Perl排序函数不能排列数组';以我预期的增量方式添加了哪些元素?

Arrays 为什么Perl排序函数不能排列数组';以我预期的增量方式添加了哪些元素?,arrays,perl,sorting,Arrays,Perl,Sorting,Perl排序函数无法以预期的增量方式排列数组元素 @array\u sort=sort{$a$b}@array @array = ("BE_10", "BE_110", "BE_111", "BE_23", "BE_34", "BE_220", "BE_335"); @array_sort = sort { $a <=> $b } @array; print "array_sort = @array_sort\n"; @array=(“BE_10”、“BE_110”、“BE_111

Perl排序函数无法以预期的增量方式排列数组元素

@array\u sort=sort{$a$b}@array

@array = ("BE_10", "BE_110", "BE_111", "BE_23", "BE_34", "BE_220", "BE_335");
@array_sort = sort { $a <=> $b } @array;
print "array_sort = @array_sort\n";
@array=(“BE_10”、“BE_110”、“BE_111”、“BE_23”、“BE_34”、“BE_220”、“BE_335”);
@array_sort=sort{$a$b}@array;
打印“array\u sort=@array\u sort\n”;
预期结果: 数组排序=
BE_10 BE_23 BE_34 BE_110 BE_111 BE_220 BE_335

实际结果: 数组排序=
BE_10 BE_110 BE_111 BE_23 BE_34 BE_220 BE_335


听起来是一个很好的例子

如果前缀总是相同的,只是下划线后面的数字不同:

my @array = ("BE_10", "BE_110", "BE_111", "BE_23", "BE_34", "BE_220", "BE_335");

my @array_sort = map { $_->[0] }
                 sort { $a->[1] <=> $b->[1] }
                 map { [ $_, (split /_/, $_)[1] ] } @array;

print "array_sort = @array_sort\n";
my@array=(“BE_10”、“BE_110”、“BE_111”、“BE_23”、“BE_34”、“BE_220”、“BE_335”);
my@array\u sort=map{$\uu->[0]}
排序{$a->[1]$b->[1]}
映射{[$\,(拆分/,$\[1]]}@array;
打印“array\u sort=@array\u sort\n”;
如果可能不同:

my @array = ("BE_10", "BE_110", "BE_111", "BE_23", "CE_34", "BE_220", "CE_335");

my @array_sort = map { $_->[0] }
                 sort { $a->[1] cmp $b->[1] || $a->[2] <=> $b->[2] }
                 map { [ $_, split(/_/, $_) ] } @array;

print "array_sort = @array_sort\n";
my@array=(“BE_10”、“BE_110”、“BE_111”、“BE_23”、“CE_34”、“BE_220”、“CE_335”);
my@array\u sort=map{$\uu->[0]}
排序{$a->[1]cmp$b->[1]| |$a->[2]$b->[2]}
映射{[$\u,split(/\u/,$\u)]}@array;
打印“array\u sort=@array\u sort\n”;


基本思想是将原始数组分解为数组引用列表,其中包含原始元素和要排序的转换位,进行排序,然后按新的排序顺序提取原始元素。

始终使用
使用strict;使用警告。它会发现你的问题,那就是你所有的字符串的数值都是零。由于所有字符串的数字都相同,因此您提供的排序函数始终返回零。因此,由于Perl使用了稳定的排序,字符串的顺序保持不变

您希望执行“自然排序”,并且有这样的模块可以实现这一点

use Sort::Key::Natural qw( natsort );

my @sorted = natsort @unsorted;

嗨,Shawn,尝试了第一种选择,效果不错。谢谢分享:)谢谢池上的分享。你可以接受答案,解决你的问题。