Go 使用一次查找从映射中弹出一个值
如何在Go中实现一个只需一次查找即可从地图中弹出一个键的函数?此版本在地图上进行两次查找:Go 使用一次查找从映射中弹出一个值,go,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) } 我选中了maybedelete返回已删除键的值: package main
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)
}
我选中了maybedelete
返回已删除键的值:
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
Go没有地图的
Pop
功能,因此总是有两个操作,一个索引和一个delete
如果您担心冗长和性能,那么像这样的小助手函数将是内联的,因此使用它不会有额外的运行时开销
func pop(m map[string]int, key string) (int, bool) {
v, ok := m[key]
if ok {
delete(m, key)
}
return v, ok
}
Go没有地图的
Pop
功能,因此总是有两个操作,一个索引和一个delete
如果您担心冗长和性能,那么像这样的小助手函数将是内联的,因此使用它不会有额外的运行时开销
func pop(m map[string]int, key string) (int, bool) {
v, ok := m[key]
if ok {
delete(m, key)
}
return v, ok
}
Go没有地图的
Pop
功能,因此总是有两个操作,一个索引和一个delete
如果您担心冗长和性能,那么像这样的小助手函数将是内联的,因此使用它不会有额外的运行时开销
func pop(m map[string]int, key string) (int, bool) {
v, ok := m[key]
if ok {
delete(m, key)
}
return v, ok
}
Go没有地图的
Pop
功能,因此总是有两个操作,一个索引和一个delete
如果您担心冗长和性能,那么像这样的小助手函数将是内联的,因此使用它不会有额外的运行时开销
func pop(m map[string]int, key string) (int, bool) {
v, ok := m[key]
if ok {
delete(m, key)
}
return v, ok
}
“Pop”是堆栈/堆的典型操作。地图是无序的;设置,如果你愿意的话。改为使用。@tomwilde我的意思是
pop
,因为“pop”是堆栈/堆的典型操作。地图是无序的;设置,如果你愿意的话。改为使用。@tomwilde我的意思是pop
,因为“pop”是堆栈/堆的典型操作。地图是无序的;设置,如果你愿意的话。改为使用。@tomwilde我的意思是pop
,因为“pop”是堆栈/堆的典型操作。地图是无序的;设置,如果你愿意的话。改为使用。@tomwide我是说pop
中的“将被内联”有参考吗?我想了解一下Go编译器是如何找到内联的候选对象的。你有“将被内联”的参考资料吗?我想了解一下Go编译器是如何找到内联的候选对象的。你有“将被内联”的参考资料吗?我想了解一下Go编译器是如何找到内联的候选对象的。你有“将被内联”的参考资料吗?我很想了解一下Go编译器是如何为内联找到候选对象的。