【发布时间】:2011-07-02 06:47:43
【问题描述】:
我的多维数组哈希中的一些变量会在我离开 for 循环后立即消失。变量在循环中一个接一个地正确打印,但是当我在循环外打印任何项目时,除了第一项之外,它始终为空。
for my $y (0..$last_row - 2) {
my $mlid = $Sheet->Cells($y+2, 1)->{'Value'};
my @a = ();
$a[0] = $Sheet->Cells($y+2, 3)->{'Value'};
$a[1] = $Sheet->Cells($y+2, 4)->{'Value'};
$a[2] = $Sheet->Cells($y+2, 6)->{'Value'};
$a[3] = $Sheet->Cells($y+2, 7)->{'Value'};
$a[4] = $Sheet->Cells($y+2, 8)->{'Value'};
push @{$longHash{$mlid}}, [ @a ];
print "Item in Array in Hash: $longHash{$mlid}[1][0]\n"; #this prints nothing
if (exists $numPeople{$mlid}){
$numPeople{$mlid}++;
}else{
$numPeople{$mlid} = 0;
$numPeople{$mlid}++;
}
}
print "Item in Array in Hash: $longHash{7202}[0][0]\n"; #this prints properly
print "Item in Array in Hash: $longHash{7202}[1][0]\n"; #this prints nothing
行为应该是:
我有一个哈希。单个 mlid 的键给出了一个数组(代表一个人)。 在每个数组中,应该有另一个数组,其中 0-4 索引是从我正在读取的 Excel 文件中定义的。
所以,要从 mlid 7202、第 7 个人和 Excel 中的第 4 列获取数据,我应该输入 $longHash{7202}[7][1](因为我将第 4 列映射到第 1 列数组的值。)
【问题讨论】:
-
您刚刚更改了代码,现在
$y不是哈希的索引。您能否发表评论并说出行为应该是什么?我认为您现在需要做的就是将$longHash{7202}[0][0]更改为$longHash{7202}[0]。 -
如果您正在使用
$longHash{7202}[0]而不是$longHash{7202}[0][0],请将push @{$longHash{$mlid}}, [ @a ];更改为$longHash{$mlid} = [ @a ];。 -
但我需要 3 层的额外信息。 MLID、人员、人员统计信息。每个都有多个,我无法摆脱一层。
-
好的,正在检查。我已经更新了我的答案。我认为您的代码现在应该可以工作了。如果不是,请尝试我的示例,看看它是否有效。如果是这样,那么可能存在不同的问题。例如,
$mlid==7202中可能只有一个人。尝试添加use strict; use warnings;。
标签: arrays perl hash multidimensional-array perl-data-structures