如何从地图内部的切片中删除元素?
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)
}
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");
}
}
我有一个地图,其中有一个键和该键的多个值。
我想做的是从 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)
}
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");
}
}