doutang1884 2014-06-30 17:55
浏览 2

使用一次查询从地图弹出一个值

How to implement in Go a function that pops a key from a map using just one lookup? This version does two lookups on the map:

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)
}

I checked maybe delete returns the value of deleted key:

package main

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

But this doesn't work:

prog.go:5: delete(m, "a") used as value
  • 写回答

1条回答 默认 最新

  • dsv768456 2014-06-30 18:14
    关注

    Go doesn't have a Pop function for maps, so there will always be 2 operations, a index and a delete.

    If you're worried about verbosity and performance, and small helper function like so would be inlined, so there's no extra runtime overhead to using it.

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

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向