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

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


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


例子:


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

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

str2 := "Doe"

map1["p1"] = str1

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


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


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


至尊宝的传说
浏览 90回答 2
2回答

不负相思意

不可能从地图内部的切片中“就地”删除元素。您需要先从地图中获取切片,从切片中删除元素,然后将结果存储在地图中。要通过元素的值查找元素的索引,然后将其从切片中删除,golang.org/x/exp/slices如果您使用的是 Go1.18,则可以使用该包。package mainimport (    "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 mainfunc main () {    var sessions = map[string] chan int{};    delete(sessions, "moo");}或者package mainfunc main () {    var sessions = map[string] chan int{};    sessions["moo"] = make (chan int);    _, ok := sessions["moo"];    if ok {        delete(sessions, "moo");    }}
打开App,查看更多内容
随时随地看视频慕课网APP