Структура данных с двумя первичными ключами? (кэширование пар адресов широта / долгота) - PullRequest
4 голосов
/ 20 октября 2010

Я пытаюсь кэшировать пары адресов широта / долгота из Карт Google, поэтому мне нужна структура данных, в которой ключ равен двум целым числам (широта и долгота).Какова самая простая структура данных для этого?

До сих пор я думал о двух способах:

Вложенный хеш:

{37.734608 {-121.913019 "San Ramon, CA" -121.6 "Tracy, CA"}}

Конкат двух, чтобы получить ключ:

{"37.734608,-121.913019" "San Ramon, CA" "37.734608,-121.6" "Tracy, CA"}}

Мне не хватает других решений, и что бы вы порекомендовали?

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

Поскольку у вас есть lisp в ваших тегах, самый простой и идиоматичный способ - использовать список ассоциаций:

;; Sample in Scheme
>  (define lat/lon (list (cons '(3.44 5.44) 
                                '("blah" "3.44,5.44" "bloo")) 
                         (cons '(37.734608 -121.913019) 
                               '("San Ramon, CA" "37.734608,-121.6" "Tracy, CA"))))

> (assoc '(3.44 5.44) lat/lon)
=> ((3.44 5.44) "blah" "3.44,5.44" "bloo")

> (assoc '(37.734608 -121.913019) lat/lon)
=> ((37.734608 -121.913019) "San Ramon, CA" "37.734608,-121.6" "Tracy, CA")
1 голос
/ 20 октября 2010

проверить Z-порядок но что вы используете для хранения этого? Если это СУБД, почему вы не можете иметь первичный ключ с двумя полями?

Преимущество Z-порядка состоит в том, что если вы сортируете по нему, то близкие (физически) вещи обычно хранятся близко (в памяти / на диске) вместе

...