Я перебираю кеш хэша хешей ключей широты, которые указывают на пары ключ / значение долгот / городов.Я пытаюсь найти приблизительные совпадения для широты / долготы, которые достаточно близки к тому, что уже было найдено и находится в хэше.
Я делаю это так
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' => {},
...
Какой умный или хотя бы разумный способ сделать этот поиск?Так что я не случайно добавляю ключи в хеш, просто просматривая их?