Google maps api 3 具有两个主键的数据结构?(缓存lat/lon地址对)

Google maps api 3 具有两个主键的数据结构?(缓存lat/lon地址对),google-maps-api-3,data-structures,lisp,latitude-longitude,reverse-geocoding,Google Maps Api 3,Data Structures,Lisp,Latitude Longitude,Reverse Geocoding,我正试图从GoogleMaps缓存lat/lon地址对,所以我需要一个数据结构,其中键是两个int(lat和lon)。最简单的数据结构是什么 到目前为止,我想到了两种方法: 嵌套哈希: {37.734608 {-121.913019 "San Ramon, CA" -121.6 "Tracy, CA"}} 将这两个字母连成键: {"37.734608,-121.913019" "San Ramon, CA" "37.734608,-121.6" "Tracy, CA"}} 我是否遗漏了任何其

我正试图从GoogleMaps缓存lat/lon地址对,所以我需要一个数据结构,其中键是两个int(lat和lon)。最简单的数据结构是什么

到目前为止,我想到了两种方法:

嵌套哈希:

{37.734608 {-121.913019 "San Ramon, CA" -121.6 "Tracy, CA"}}
将这两个字母连成键:

{"37.734608,-121.913019" "San Ramon, CA" "37.734608,-121.6" "Tracy, CA"}}
我是否遗漏了任何其他解决方案,您会推荐哪种解决方案?

请查看,但您使用什么来存储这些解决方案?如果是RDBMS,为什么不能有一个2字段的主键


Z顺序的好处是,如果按它排序,那么(物理上)相近的东西通常会紧密地(存储在内存中/磁盘上)存储在一起

正如标记中的
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")

嗯,很有趣。顺便说一下,我没有使用RDBMS,现在我只想在内存中使用一个简单的数据结构。也许我误用了术语“主键”。这取决于您是否需要进行范围/框查询。如果您这样做,z-order绝对是基于磁盘的大型数据集的最佳选择,否则嵌套散列(仅精确匹配)或嵌套排序树(用于内存中小型数据集的范围/框查询)也会起作用……接受Vijay的答案,因为这正是我想要的-简单且惯用。我很感激关于空间搜索的答案,不过,在我第二次通过时,我将不得不研究它!