2

我想在 Perl 中对一个 3 维数组进行排序。数组元素的形式为:

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

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

例如,对于 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] 被交换。很抱歉描述混乱..有什么想法吗?

问候,乔戈斯

4

1 回答 1

1

这与“ Perl 中的 Schwartzian 变换? ”有关。您实际上只是对单个数组 ( @{ $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);
于 2013-09-04T19:57:53.563 回答