Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何对2D数组进行排序?_Perl_Sorting - Fatal编程技术网

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;

向我们展示您编写的代码将是一个好主意。向我们展示您编写的代码将是一个好主意。