给定一组Letter_Number组合,我如何先按字母排序,然后编号:
( B_5 A_11 C_0 A_10 A_1 )
Run Code Online (Sandbox Code Playgroud)
要得到:
( A_1 A_10 A_11 B_5 C_0 )
Run Code Online (Sandbox Code Playgroud)
?
默认情况下,排序以词汇方式进行比较.因此,如果您想将数字视为010> 1和2 <11的实际数字,那么这更像您需要的:
my @list = qw(B_5 A_11 C_0 A_10 A_1);
my @sorted = sort char_then_num @list;
sub char_then_num {
my ($a_char, $a_num) = split '_', $a;
my ($b_char, $b_num) = split '_', $b;
return $a_char cmp $b_char
||
$a_num <=> $b_num;
}
Run Code Online (Sandbox Code Playgroud)