使用一次查找从地图中弹出值

时间:2014-06-30 17:55:24

标签: go

如何在Go中实现一个只使用一次查找从地图弹出一个键的功能?此版本在地图上执行两次查找:

package main

import "fmt"

func main() {
    m := map[string]int{"a":1, "b":2}
    a, ok := m["a"]
    if ok {
        delete(m, "a")
    }
    fmt.Println(a, m)
}

我检查过delete可能会返回已删除密钥的值:

package main

func main() {
    m := map[string]int{"a":1, "b":2}
    println(delete(m, "a"))
}

但这不起作用:

prog.go:5: delete(m, "a") used as value

1 个答案:

答案 0 :(得分:0)

Go没有地图的Pop功能,因此总会有2个操作,一个索引和一个delete

如果您担心详细程度性能,并且会内联这样的小辅助函数,那么使用它就不会有额外的运行时开销。

func pop(m map[string]int, key string) (int, bool) {
    v, ok := m[key]
    if ok {
        delete(m, key)
    }
    return v, ok
}