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

How to delete an element from a slice that's inside a map?

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

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

示例:

map1 := make(map[string][]string)
str1 := []string{"Jon", "Doe", "Captain", "America"}
str2 := "Doe"
map1["p1"] = str1

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

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

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

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

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

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

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