我想在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
答案 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);