2016-04-15 142 views
0

说我有在Perl排序二维数组在Perl一排

[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]); 

它无助于改变排列的顺序,我的其他尝试删除数组排在一起。

我可以找到的其他二维排序问题是重新排序行/排序列。

我相信答案很简单。

+0

'$阵列[$ i] = [排序{$一个<=> $ B} @ {$ array [$ i]}];' –

回答

6

好的,你需要知道的是 - perl中的一个数组数组被实现为一个数组引用。因此 - $array[$i] - 是对数组的引用。

所以你可以简单地说:

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

虽然注意默认情况下,排序不字母,而不仅仅是数字。

所以,你可能想:

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

或者,如果你想要做的一大堆:

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

谢谢! perl是一种非常简单的语言,但在边缘处会有一点变化 – cjhutton

+0

'@array = sort {...} @array;'''sort''可以就地对数组进行排序以提升性能。调整了使用此表单的答案。 – ikegami