说我在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排序问题是重新排序行/排序列。
我确定答案很简单。
答案 0 :(得分:6)
好的,您需要知道的是 - perl中的数组数组是作为数组引用数组实现的。
所以 - $array[$i]
- 是对数组的引用。
所以你可以简单地说:
@{$array[$i]} = sort @{$array[$i]};
虽然默认情况下是注释,但sort会使用字母数字,而不仅仅是数字。
所以你可能想要:
@{$array[$i]} = sort { $a <=> $b } @{$array[$i]};
或者如果你想要做很多事情:
@$_ = sort {$a<=>$b} @$_ for @array;