在perl中对2D数组的行进行排序

时间:2016-04-15 19:08:44

标签: arrays perl sorting multidimensional-array

说我在perl中有一个2D数组

[2, 4, 6, 1, 3, 2]            # $i = 0
[5, 2, 4, 2, 1]               # $i = 1
[8, 2, 3, 5, 7, 1, 3, 5]      # $i = 2
[2, 1]                        # $i = 3

如何对一行进行排序,使它们保持相同的顺序?

如:

[2, 4, 6, 1, 3, 2]
[1, 2, 2, 4, 5]                  # sorted row
[8, 2, 3, 5, 7, 1, 3, 5]
[2, 1]

我尝试了一个简单的路线来排序$ i行,

@array[$i] = sort(@array[$i]);

它没有改变数组的顺序,我的其他尝试已经一起删除了数组行。

我能找到的其他2D排序问题是重新排序行/排序列。

我确定答案很简单。

1 个答案:

答案 0 :(得分:6)

好的,您需要知道的是 - perl中的数组数组是作为数组引用数组实现的。

所以 - $array[$i] - 是对数组的引用。

所以你可以简单地说:

 @{$array[$i]} = sort @{$array[$i]}; 

虽然默认情况下是注释,但sort会使用字母数字,而不仅仅是数字。

所以你可能想要:

 @{$array[$i]} = sort { $a <=> $b } @{$array[$i]};

或者如果你想要做很多事情:

@$_ = sort {$a<=>$b} @$_ for @array;