我知道似乎很混亂。我試圖「畫出」這個數據結構:如何更新散列數組中的值,該散列值位於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