Perl排序3d数组

时间:2013-09-04 19:40:05

标签: perl sorting multidimensional-array

我想在Perl中对三维数组进行排序。数组的元素采用以下形式:

$ arr_3d [indA] [indB] [indC],indC = 1的每个元素都是数字

我需要的是,对于给定的indA值,对indB索引/定义的所有子数组进行排序,其值为$ arr_3d [indA] [indB] [indC = 1]的值的递减顺序。

e.g。对于1x2x2阵列,如果:

$arr_3d[1][1][1] = 1
$arr_3d[1][1][2] = 4
$arr_3d[1][2][1] = 2
$arr_3d[1][2][2] = 3

然后排序:

$arr_3d[1][1][1] = 2
$arr_3d[1][1][2] = 3
$arr_3d[1][2][1] = 1
$arr_3d[1][2][2] = 4

因此,在对子阵列进行排序后,$ arr_3d [1] [1]和$ arr_3d [1] [2]进行了交换。 抱歉搞砸了说明..有什么想法吗?

此致 Giorgos

1 个答案:

答案 0 :(得分:1)

这与“Schwartzian transform in Perl?”有关。您实际上只是对单个数组进行排序(@{ $arr_3d[$indA] })。

我测试了这个并且它有效。您可能正在使用Fortran索引表示法(从1开始),因此我将其更改为C索引(从0开始)。

use Data::Dumper;

my @arr_3d ; 
$arr_3d[0][0][0] = 1; 
$arr_3d[0][1][0] = 2; 
$arr_3d[0][0][1] = 4; 
$arr_3d[0][1][1] = 3; 
my $indA = 0; 
my $indC = 0;

my @temp = @{ $arr_3d[$indA] };

@{ $arr_3d[$indA] } = sort { $b->[$indC] <=> $a->[$indC] } @temp;


print Dumper(\@arr_3d);