为了账号安全,请及时绑定邮箱和手机立即绑定

要删除地图[关键字]吗?

要删除地图[关键字]吗?

Go
陪伴而非守候 2021-04-16 19:19:16
我有一张地图:var sessions =  map[string] chan int{}如何删除sessions[key]?我试过了:sessions[key] = nil,false;那没用。更新(2011年11月):Go版本1中删除了删除映射条目的特殊语法:Go 1将删除特殊的地图分配,并引入一个新的内置函数delete:delete(m, x)将删除由表达式检索的地图条目m[x]。...
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

很奇怪的是,


package main


func main () {

    var sessions = map[string] chan int{};

    delete(sessions, "moo");

}

似乎有效。不过,这似乎对资源的使用很差!


另一种方法是检查是否存在并使用值本身:


package main


func main () {

    var sessions = map[string] chan int{};

    sessions["moo"] = make (chan int);

    _, ok := sessions["moo"];

    if ok {

        delete(sessions, "moo");

    }

}


查看完整回答
反对 回复 2021-04-26
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

从Go 1发行说明复制

在旧的语言中,k要从所代表的地图中删除带有键的条目m,请写下该语句,

m[k] = value, false

此语法是一种特殊的特殊情况,唯一的二对一分配。它要求传递一个被评估但被丢弃的值(通常被忽略),以及一个几乎总是常量false的布尔值。它完成了工作,但很奇怪,也是争论的焦点。

在Go 1中,语法已经消失了。而是有一个新的内置函数delete。通话

delete(m, k)

将删除由表达式检索的地图条目m[k]。没有返回值。删除不存在的条目是无操作。

更新:跑步go fix会的形式表达转换m[k] = value, falsedelete(m, k)时显然被忽略的值可以从程序被安全地丢弃,false是指预定义的布尔常数。该修复工具将标记该语法的其他用途,以供程序员检查。


查看完整回答
反对 回复 2021-04-26
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

从有效出发:

要删除地图条目,请使用delete内置函数,该函数的自变量是地图和要删除的键。即使地图上已经没有钥匙,也可以这样做。

delete(timeZone, "PDT")  // Now on Standard Time


查看完整回答
反对 回复 2021-04-26
  • 3 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信