2014-10-10 60 views
0

我在Perl中有一個二維數組。我想排序數組中的列,但我想忽略最左邊的n列。我想按行0中的值排序。如何按列排序Perl中的二維數組,忽略某些列?

讓我澄清什麼可能是一個令人困惑的描述。我有這樣一個表格:

Z W D F E C 
0 1 2 3 4 5 
6 7 8 9 0 1 

我想忽略左邊的一些列數,比如前兩個。我想通過第一行中的值對剩餘列進行排序。最終的結果是這樣的:

Z W C D E F 
0 1 5 2 4 3 
6 7 1 8 0 9 

我該如何以優雅的方式做到這一點?我明白如何使用比較函數來進行排序,但我不知道如何讓Perl忽略前n列。

+2

你想與mutlidimensional陣列這裏解決什麼問題? – 2014-10-10 20:12:01

+0

你的二維數組是如何設置的 - 按列還是按行? – 2014-10-10 21:32:34

回答

1

您需要在舊訂單和新訂單之間建立關係。

下面創建索引@new_order陣列可用於各行進行排序:

#!/usr/bin/perl 
use strict; 
use warnings; 

my @data = map { [split] } <DATA>; 

my @old_header = @{ $data[0] }; 
my %old_order = map { $old_header[$_] => $_ } (0 .. $#old_header); 

my @new_header = (splice(@old_header, 0, 2), sort @old_header); 
my @new_order = @old_order{@new_header}; 

# Output Transformed Data 
for (@data) { 
    print "@{$_}[@new_order]\n" 
} 

__DATA__ 
Z W D F E C 
0 1 2 3 4 5 
6 7 8 9 0 1 

輸出:

Z W C D E F 
0 1 5 2 4 3 
6 7 1 8 0 9