use*_*121 1 arrays sorting perl numeric
我有一个看起来像这样的数组:
array[0]: 6 8
array[1]: 12 9 6
array[2]: 33 32 5
array[3]: 8 6
Run Code Online (Sandbox Code Playgroud)
我想对这个数组进行排序,使它看起来像这样:
array[0]: 6 8
array[1]: 6 9 12
array[2]: 5 32 33
array[3]: 6 8
Run Code Online (Sandbox Code Playgroud)
我知道我可以对数组进行排序@newarray = sort {$a cmp $b} @array;
,但我也需要对每行中的元素进行排序.我怎样才能做到这一点?
假设你有一个字符串数组,并且你想要的只是将每个字符串排序,好像它是一个数字的子数组(但是留下一个字符串?):
#!/usr/bin/env perl
use strict;
use warnings;
my @array = ('6 8', '12 9 6', '33 32 5', '8 6');
foreach my $string (@array) {
$string = split_sort($string);
}
sub split_sort {
my $string = shift @_;
my @internal_nums = split ' ', $string;
@internal_nums = sort {$a <=> $b} @internal_nums;
return join ' ', @internal_nums;
}
print "@array\n";
Run Code Online (Sandbox Code Playgroud)
您有一个要转换的项目列表.这是地图的完美候选人.还要注意split的默认行为:它$_
在删除前导空格后操作,在空格上拆分.
my @array = ('6 8', '12 9 6', '33 32 5', '8 6');
@array = map { join ' ', sort {$a <=> $b} split } @array;
Run Code Online (Sandbox Code Playgroud)
你也可以使用map来解决它
#!/usr/bin/env perl
my @numbers = (
'6 8',
'12 9 6',
'33 32 5',
'8 6',
);
my @sorted;
push (@sorted, map { join " ", sort { $a <=> $b } (split / /, $_) } @numbers);
print "$_\n" for @sorted;
Run Code Online (Sandbox Code Playgroud)
输出:
6 8
6 9 12
5 32 33
6 8
Run Code Online (Sandbox Code Playgroud)