我想知道如何填充以下哈希结构:
my $hash = {
'user' => [
{
'id' => '1',
'name' => 'John'
},
{
'id' => '2',
'name' => 'Pat'
}
]
};
我希望能够动态填充此哈希。我想循环数据库中的值并推送(添加)新值(id,name)以填充哈希值。
答案 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}