在Perl中填充哈希哈希值

时间:2012-02-22 19:29:22

标签: arrays perl hash populate perl-data-structures

我想知道如何填充以下哈希结构:

my $hash = {
    'user' => [
        {
            'id' => '1',
            'name' => 'John'
        },
        {
            'id' => '2',
            'name' => 'Pat'
        }

    ]
};

我希望能够动态填充此哈希。我想循环数据库中的值并推送(添加)新值(id,name)以填充哈希值。

3 个答案:

答案 0 :(得分:3)

向该结构添加另一个元素:

# Get the element
my $hashRef = {
    'id' => '1',
    'name' => 'John'
};
# You didn't specify what you have as far as DB data
my $hashRef = someMethodReturningDatabaseData(); 

# Add to the arrayref:
my $hash = { user => [] }; # Initialize - only once
$hash->{user} ||= []; # As alternative, always make sure to have an arrayref,
                      # on every iteration
# Add to the array ref
push @{ $hash->{user} }, $hashRef;

根据您对其他答案的评论,您可以

my $hash = { user => [] }; # Initialize - only once
foreach my $user (@users) {
    push @{ $hash->{user} }, { id => $user->[0], name => $user->[1] };
}

作为一个注释,您的数据结构看起来很奇怪 - 不清楚为什么您需要只有一个硬编码密钥“user”的外部哈希。

答案 1 :(得分:2)

为了在哈希散列中填充值,可以使用:

my %hash;
....
$hash{$key}{$subkey} = $value;

然而,当你循环它们时要小心!标量值$hash{$key}实际上是子哈希的标量引用,而不是子哈希对象本身。

答案 2 :(得分:0)

    my $user = {
        id   => $id,
        name => $name,
    };

    push @{ $hash->{user} }, $user;

Nit:$hash->{user}应命名为$hash->{users}