如何在Perl中停止数组排序

时间:2016-09-07 19:10:46

标签: arrays perl sorting perl-module perl-data-structures

我知道这是Perl中一个非常基本的问题所以我无法在任何地方找到解决方案。

我正在使用Perl包Text::ASCIITable来美化输出。

下面是我的代码,我使用数组构建表行。

my @output =  [
    {
        one => "1",
        two => "2",
        three => "3",
        four => "4",        
    },
    {
        one => "1",
        two => "2",
        three => "3",
        four => "4",    
    }
];  

my $t = Text::ASCIITable->new();

# Table header values as static. 
$t->setCols('one','two','three','four');

foreach my $val ( @output ) {
    my @v = values $val;
    push @$t, @v;
}

print $t;

这给我输出如下

.-----+-----+-------+------.
| one | two | three | four |
|=----+-----+-------+-----=|
| 1   | 2   | 3     | 4    |  
| 2   | 4   | 3     | 1    |  
'-----+-----+-------+------'

问题是,表行被洗牌并且与表头不匹配。因为给定的输入数组排序本身让我烦恼。

那么如何阻止Perl对数组进行排序?我只想得到结果。

任何帮助都将受到极大的赞赏。

1 个答案:

答案 0 :(得分:2)

没有排序。恰恰相反,问题是你没有订购价值。修正:

my @field_names = qw( one two three four );

$t->setCols(@field_names);

for my $val ( @output ) {
   push @$t, @$val{@field_names};
}