2016-04-15 144 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