我知道似乎很混乱。我试图“画出”这个数据结构:如何更新散列数组中的值,该散列值位于perl中散列的散列中?
hash-> key - >((key) - > [(key,value),(key,value),(key,value)... ], (key,value))
所以有第一个关键字,它的值被括在圆括号中。散列的第一个键的值是两个键,一个(右边的)是另一个简单的键,值对。另一个(左边的)键值是散列数组。我能够使用以下行的代码来更新“右”键,值对:
$hash{$parts[1]}{"PAGES"} += $parts[2];
其中$份[1]和$份[2]是从数组只是元素。我+ =从我的哈希值的“右”键值对。我现在需要做的是更新“左”键,值对 - 散列哈希中的散列数组。这是我如何初始化这两个键,值对数组中的哈希散列:
$hash{$printer}{"PAGES"} = 0;
$hash{$printer}{"USERS"} = [@tmp];
这是我多次尝试哈希值的数组中访问和更新的值之一:
$hash{$parts[1]}{"USERS"}[$parts[0]] += $parts[2];
我只是无法弄清楚这个正确的语法。如果有人可以帮助我,我会很感激。谢谢。
编辑:我猜一个更尖锐的问题是:我如何从哈希数组中获得哈希键(记住数组是散列哈希)?
编辑:将此添加到代码:
#Go through each user to check to see which user did a print job and add the page
#count to their total
#$parts[0] is the user name, $parts[1] is the printer name, $parts[2] is the page
#count for the current print job
for(my $i=0;$i<$arr_size;$i++)
{
my $inner = $hash{$parts[1]}{"USERS"}[$i];
my @hash_arr = keys %$inner;
my $key = $hash_arr[0];
#problem line - need to compare the actual key with $parts[0]
#(not the key's value which is a number)
if($hash{$parts[1]}{"USERS"}[$i]{$key} eq $parts[0])
{
$hash{$parts[1]}{"USERS"}[$i]{$parts[0]} += $parts[2];
}
}
编辑:哎呦嘿嘿,这是我需要的。它仍然不是那里,但这是我正在寻找的种类:
if($key eq $parts[0])
{
$hash{$parts[1]}{"USERS"}[$i]{$parts[0]} += $parts[2];
}
是的,我使用Data :: Dumper来查看值,并且我得到所有0的地方应该有1或4等。 – 2011-04-29 13:20:49
这几乎就是我想要做的,只是使用散列而不是数字(即使用其中一个散列元素的键作为数组索引来获取其相应的值并对其进行操作)。 – 2011-04-29 14:16:40
@john史密斯不知道我跟着你,但看到编辑的回应。 – FMc 2011-04-29 17:13:08