如何在 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)
}
Run Code Online (Sandbox Code Playgroud)
我检查过可能delete会返回已删除键的值:
package main
func main() {
m := map[string]int{"a":1, "b":2}
println(delete(m, "a"))
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
prog.go:5: delete(m, "a") used as value
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)