Perl 如何取消对散列数组散列中的项的引用
我有一个这样构建的数据结构:-Perl 如何取消对散列数组散列中的项的引用,perl,Perl,我有一个这样构建的数据结构:- $ICVDWKey = "($LLX $LLY) ($URX $URY)"; ... push @{$ICVDWStats{$ICVDWKey}}, { ICVDensity=>$Density, ICVLayerArea=>$LayerArea, ICVWindowArea=>$WindowArea }; 我可以像这样取消引用它的内容 foreach $ICVDWKey (@AllICVDWCoords) {
$ICVDWKey = "($LLX $LLY) ($URX $URY)";
...
push @{$ICVDWStats{$ICVDWKey}}, {
ICVDensity=>$Density,
ICVLayerArea=>$LayerArea,
ICVWindowArea=>$WindowArea
};
我可以像这样取消引用它的内容
foreach $ICVDWKey (@AllICVDWCoords) {
foreach (@{$ICVDWStats{$ICVDWKey}}) {
$ICVDensity = $_->{ICVDensity};
$ICVLayerArea = $_->{ICVLayerArea};
$ICVWindowArea = $_->{ICVWindowArea};
...
}
}
…一切都很好。然而,当另一个数据结构以相同的方式构建时,我遇到了问题,我需要在循环遍历原始数据结构时检查其内容,如上所述。这里有一个例子
foreach $ICVDWKey (@AllICVDWCoords) {
foreach (@{$ICVDWStats{$ICVDWKey}}) {
$ICVDensity = $_->{ICVDensity};
$ICVLayerArea = $_->{ICVLayerArea};
$ICVWindowArea = $_->{ICVWindowArea};
...
if (exists ($ICC2DWStats{$ICVDWKey})) {
$ICC2Density = $_->{ICC2Density};
$ICC2LayerArea = $_->{ICC2LayerArea};
$ICC2WindowArea = $_->{ICC2WindowArea};
...
}
}
}
我知道,if exists$ICVDWKey
匹配工作正常,但我无法清晰地取消对ICC2DWStats哈希数据内容的引用。当两个数据结构之间的$ICVDWKey
键匹配时,检索ICC2*
数据的正确方法是什么?我确信这是ICC2*
参考文献中的$\ucode>,但我不知道应该用什么来代替
谢谢 不使用表示所需的$ICC2DWStats
hashref以外的结构的$\uucode>,您需要明确指定要从中提取的实际数据的哈希和键:
for $ICVDWKey (@AllICVDWCoords) {
for (@{$ICVDWStats{$ICVDWKey}}) {
$ICVDensity = $_->{ICVDensity};
$ICVLayerArea = $_->{ICVLayerArea};
$ICVWindowArea = $_->{ICVWindowArea};
...
if (exists ($ICC2DWStats{$ICVDWKey})) {
$ICC2Density = $ICC2DWStats->{$ICVDWKey}{ICC2Density};
$ICC2LayerArea = $ICC2DWStats->{$ICVDWKey}{ICC2LayerArea};
$ICC2WindowArea = $ICC2DWStats->{$ICVDWKey}{ICC2WindowArea};
...
}
}
}
请注意,您应该使用use strict代码>和使用警告
@Chris在您的例子中,内部foreach
中的$\ucode>是{$ICVDWStats{$ICVDWKey}}}
的元素,而您希望访问{$ICC2DWStats{$ICVDWKey}
。为了访问“并行”数组元素,您可能需要切换到迭代索引。