你好,我需要进行一些双向查找,并且需要一种类似于map[key][key]的映射结构。Go语言中是否有类似的数据结构?或者最佳实践是什么?
你好,我需要进行一些双向查找,并且需要一种类似于map[key][key]的映射结构。Go语言中是否有类似的数据结构?或者最佳实践是什么?
语言和库中没有这样的东西(据我所知),但它们很容易实现:只需将两个映射结合为一个 struct
并确保它们保持同步。唯一的问题是难以以通用的方式编写它们,但可以使用 interface {}
解决:
type BidirMap struct {
left, right map[interface{}]interface{}
}
func (m *BidirMap) Insert(key, val interface{}) {
if _, inleft := left[key]; inleft {
delete(left, key)
}
if _, inright := right[val]; inright {
delete(right, val)
}
m.left[key] = val
m.right[val] = key
}
etc.