Perl 如何对2D数组进行排序?
也许我错过了什么。首先,它对我来说似乎太容易了。我认为我可以使用Perl 如何对2D数组进行排序?,perl,sorting,Perl,Sorting,也许我错过了什么。首先,它对我来说似乎太容易了。我认为我可以使用map{}sort{}map{}轻松实现它,但现在它对我来说变得复杂了 最后,问题是我有一个数组: @array=(['b','e','d'],['s','a','f'],['g','i','h']); 我想要像这样的排序数组 @sorted_array=(['a','f','s'],['b','d','e'],['g','h','i']); 我写 ##sort based on columns######## my @sort
map{}sort{}map{}
轻松实现它,但现在它对我来说变得复杂了
最后,问题是我有一个数组:
@array=(['b','e','d'],['s','a','f'],['g','i','h']);
我想要像这样的排序数组
@sorted_array=(['a','f','s'],['b','d','e'],['g','h','i']);
我写
##sort based on columns########
my @sorted_array= map{my @sorted=sort{$a cmp $b}@$_;[@sorted]}@array;
###sort on rows####
my @sorted_array= map{$_->[0]}sort{$a->[1] cmp $b->[1]} map{[$_,"@$_"]}@array;
但我不知道如何将其包装成一个(行和列)。我可以用来实现吗是的,你可以用它
use strict;
use warnings;
my @array =( [qw(b e d)], [qw(s a f)], [qw(g i h)] );
my @sorted_array =
map { $_->[0] }
sort {
$a->[1] cmp $b->[1]
}
map {
my $r = [ sort @$_ ];
[$r, "@$r"];
}
@array;
use Data::Dumper;
print Dumper \@sorted_array;
输出
$VAR1 = [
[
'a',
'f',
's'
],
[
'b',
'd',
'e'
],
[
'g',
'h',
'i'
]
];
是的,你可以用它
use strict;
use warnings;
my @array =( [qw(b e d)], [qw(s a f)], [qw(g i h)] );
my @sorted_array =
map { $_->[0] }
sort {
$a->[1] cmp $b->[1]
}
map {
my $r = [ sort @$_ ];
[$r, "@$r"];
}
@array;
use Data::Dumper;
print Dumper \@sorted_array;
输出
$VAR1 = [
[
'a',
'f',
's'
],
[
'b',
'd',
'e'
],
[
'g',
'h',
'i'
]
];
这是两种不同的类型。首先要对内部数组进行单独排序,然后可以根据每个内部数组的第一个元素对外部数组进行排序
use List::UtilsBy qw( sort_by );
my @array =( [qw(b e d)], [qw(s a f)], [qw(g i h)] );
# sort the inner ones individually
@$_ = sort @$_ for @array;
# sort the whole by the first element of each
my @sorted_array = sort_by { $_->[0] } @array;
或者,如果您更愿意一次完成所有操作并避免临时突变:
my @sorted_array = sort_by { $_->[0] }
map { [ sort @$_ ] } @array;
这是两种不同的类型。首先要对内部数组进行单独排序,然后可以根据每个内部数组的第一个元素对外部数组进行排序
use List::UtilsBy qw( sort_by );
my @array =( [qw(b e d)], [qw(s a f)], [qw(g i h)] );
# sort the inner ones individually
@$_ = sort @$_ for @array;
# sort the whole by the first element of each
my @sorted_array = sort_by { $_->[0] } @array;
或者,如果您更愿意一次完成所有操作并避免临时突变:
my @sorted_array = sort_by { $_->[0] }
map { [ sort @$_ ] } @array;
向我们展示您编写的代码将是一个好主意。向我们展示您编写的代码将是一个好主意。