有没有类似于BidiMap的东西?

3

你好,我需要进行一些双向查找,并且需要一种类似于map[key][key]的映射结构。Go语言中是否有类似的数据结构?或者最佳实践是什么?

1个回答

5

语言和库中没有这样的东西(据我所知),但它们很容易实现:只需将两个映射结合为一个 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.


顺便提一下,我认为你的意思是 func (m *BidirMap) 而不是 func (BidirMap *m),对吧? - Robin Westerlundh
@RobinWesterlundh:是的,我最近写了太多C。已经修复了! - Fred Foo
1
我们非常期待泛型的到来。也许届时我们可以拥有一个包含像这样类的集合库。 - Rick-777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接