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

如何从地图内部的切片中删除元素?

如何从地图内部的切片中删除元素?

Go
至尊宝的传说 2022-11-23 20:09:00

我有一个地图,其中有一个键和该键的多个值。


我想要做的是从值中删除单个值。


例子:


map1 := make(map[string][]string)

str1 := []string{"Jon", "Doe", "Captain", "America"}

str2 := "Doe"

map1["p1"] = str1

在上面的示例中,如果它存在于 str2 中,我想从“p1”中删除值,在我的例子中它是“Doe”


删除值映射后应该是这样的 p1:[Jon Captain America]


这是可能的还是我必须再次重写整个地图?


查看完整描述

2 回答

?
不负相思意

TA贡献1473条经验 获得超10个赞

不可能从地图内部的切片中“就地”删除元素。您需要先从地图中获取切片,从切片中删除元素,然后将结果存储在地图中。


要通过元素的值查找元素的索引,然后将其从切片中删除,golang.org/x/exp/slices如果您使用的是 Go1.18,则可以使用该包。


package main


import (

    "fmt"


    "golang.org/x/exp/slices"

)


func main() {

    map1 := make(map[string][]string)

    str1 := []string{"Jon", "Doe", "Captain", "America"}

    str2 := "Doe"

    map1["p1"] = str1


    idx := slices.Index(map1["p1"], str2)

    map1["p1"] = slices.Delete(map1["p1"], idx, idx+1)


    fmt.Println(map1)

}

https://go.dev/play/p/EDTGAJT-VdM


查看完整回答
反对 回复 2022-11-23
?
慕森卡

TA贡献1517条经验 获得超8个赞

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");

    }

}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

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