在 Perl 的哈希表中增加数值

3
我正在尝试增加哈希值,但输出结果令人困惑。我将一个由数组、哈希和标量值组成的数组传递到函数中。
下面的代码首先检查是否为哈希,如果是,则遍历其值并将其增加。
elsif (ref($_) eq "HASH"){

        foreach $s (values %{$_}){
            $s++;
        }
    }

我正在传递以下哈希值:

 { a => 1, b => 2, c => 3  }, { d => 4, e => 5 },

然而,当我打印或返回 $s 时,输出结果会有所不同,例如:

4 2 3 5 6

或者

2 4 3 6 5

或者其他随机变化。我想要的是,显然,

2 3 4 5 6

我相信这是非常简单的事情,但我在Perl方面经验不够丰富。

1个回答

7

在Perl中,哈希表是无序的。如果你想要按值排序,可以使用sort函数:

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my $ref = { a => 1, b => 2, c => 3 };

$_++ for values %$ref;
say join ' ', sort values %$ref;        # By values.
say join ' ', @$ref{ sort keys %$ref }; # By keys.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接