gpt4 book ai didi

dictionary - Go:从 map 弹出

转载 作者:IT王子 更新时间:2023-10-29 01:34:01 26 4
gpt4 key购买 nike

是否有一个现有的函数可以让我们从 GO 的 map 中弹出(键,值)对?我使用 pop 这个词而不是 remove,因为 pop 会在删除 (key,value) 的索引之后重新排列元素。

例如下面的代码:

package main

import "fmt"

func main() {
mapp := make(map[int]int)
fmt.Println("before removal:")

for i := 1; i < 7; i++ {
mapp[i] = i
}
fmt.Println(mapp)
delete(mapp, 2)
fmt.Println("\nafter the removal:")
for i := 1; i < 7; i++ {
fmt.Println(i, mapp[i])
}

}

产生以下输出:

before removal:
map[1:1 2:2 3:3 4:4 5:5 6:6]

after the removal:
1 1
2 0
3 3
4 4
5 5
6 6

我们注意到索引位置 2 是空的。我希望输出如下:

before removal:
map[1:1 2:2 3:3 4:4 5:5 6:6]

after the removal:
1 1
2 3
3 4
4 5
5 6

此功能是否已经在 Go 中,或者我是否必须实现它?

最佳答案

我认为您误解了什么是 map 以及它是如何工作的。您不应将其视为“有间隙的数组”,而应将其视为经典 hash table .

为了回答您的问题,当您使用 delete() 时,值会从 map 中删除,问题是您如何迭代“值” map 。

为了帮助您理解:

mapp := make(map[int]int)
fmt.Println(2, mapp[2])

将打印

2 0

为什么?仅仅是因为当请求的键不存在时,我们得到值类型的零值。在这种情况下,值类型是 int,因此零值是 0。

所以,你想在打印之前查看 map 中是否存在键,你必须使用双值赋值,就像这样:

for i := 1; i < 7; i++ {
if value, exists := mapp[i]; exists {
fmt.Println(i, value)
}
}

它会打印

1 1
3 3
4 4
5 5
6 6

不是您真正想要的,但是您可以通过 map 直接获得更近的位置。你可以看看this blog post获取更多信息和示例。

如果您真的想要一个可以删除值的数组,请参阅 Verran 的回答并改用 slice 。

关于dictionary - Go:从 map 弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com