如何在 Perl 中停止数组排序

问题描述 投票:0回答:1

我正在使用 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 对数组进行排序呢?我只想得到原来的结果。

arrays perl sorting perl-module perl-data-structures
1个回答
2
投票

尚未排序。恰恰相反,问题是您没有对值进行排序。已修复:

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

$t->setCols(@field_names);

for my $val ( @output ) {
   push @$t, @$val{@field_names};
}
© www.soinside.com 2019 - 2024. All rights reserved.