我正在遍历一个哈希表的缓存,它是由纬度键指向经度/城市键值对的哈希表。我试图寻找与已查找并在哈希表中的纬度/经度接近的近似匹配项。
我是这样做的:
该代码可以在范围内找到这些纬度/经度对。但是对于使用的每个纬度进行循环时,当它发现在范围内(第一个嵌套条件)时,它会将其添加到哈希中(可能是
我是这样做的:
foreach my $lat_key ( keys $lookup_cache_latlonhash ) {
if ( ($lat > ($lat_key - .5)) && ($lat < ($lat_key + .5)) ) {
foreach my $lon_key ( keys %{ $lookup_cache_latlonhash->{$lat_key}} ) {
if ( ($lon > ($lon_key - .5)) && ($lon < ($lon_key + .5)) ) {
$country = $$lookup_cache_latlonhash{$lat_key}{$lon_key};
print "Approx match found: $lat_key $lon_key $country\n";
return $country;
}
}
}
}
该代码可以在范围内找到这些纬度/经度对。但是对于使用的每个纬度进行循环时,当它发现在范围内(第一个嵌套条件)时,它会将其添加到哈希中(可能是
keys %{ $goog_lookup_cache_latlonhash->{$lat_key}}
),这并不是预期的行为,它会向哈希表中添加无用/空键:$VAR1 = {
'37.59' => {},
'37.84' => {},
'37.86' => {},
'37.42' => {
'126.44' => 'South Korea/Jung-gu'
},
'37.92' => {},
'37.81' => {},
'38.06' => {
'-122.53' => 'America/Novato'
},
'37.8' => {},
'37.99' => {},
'37.61' => {},
...
有什么聪明或至少是理智的方法来进行这种查找吗?这样我就不会在查找时无意中向哈希表中添加键了。
keys
在引用上工作被认为是一个坏主意,并且已从Perl v5.24中删除。因此,keys $lookup_cache_latlonhash
应该写成keys %$lookup_cache_latlonhash
。 - Borodin