Dictionary 围棋:从地图上弹出
是否有一个现有的函数可以在GO中从映射中弹出(键、值)对?我使用pop这个词而不是remove,因为pop会在索引(key,value)被删除之后重新排列元素 以下代码作为示例:Dictionary 围棋:从地图上弹出,dictionary,go,Dictionary,Go,是否有一个现有的函数可以在GO中从映射中弹出(键、值)对?我使用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
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])
}
}
我们注意到索引位置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中,或者我必须实现它?来自:
当使用范围循环在映射上迭代时,不会指定迭代顺序,也不能保证从一次迭代到下一次迭代的顺序相同。
因此,无法自动将值向上移动一个位置以填补空白,因为每次查看值时,键可能位于不同的迭代位置,并且无法保证映射到2
的值将向上滑动到1
如果要执行类似操作,必须手动将所有内容向下移动一个键值,例如:
for key := 2; key < len(map)-1; key++ {
map[key] = map[key+1]
}
从:
当使用范围循环在映射上迭代时,不会指定迭代顺序,也不能保证从一次迭代到下一次迭代的顺序相同。
因此,无法自动将值向上移动一个位置以填补空白,因为每次查看值时,键可能位于不同的迭代位置,并且无法保证映射到2
的值将向上滑动到1
如果要执行类似操作,必须手动将所有内容向下移动一个键值,例如:
for key := 2; key < len(map)-1; key++ {
map[key] = map[key+1]
}
我认为您误解了
地图是什么以及它是如何工作的。您不应该将其视为“带间隙的阵列”,而应该将其视为经典
为了回答您的问题,当您使用delete()
时,值将从映射中删除,问题是如何迭代映射的“值”
为了帮助您理解:
mapp := make(map[int]int)
fmt.Println(2, mapp[2])
将打印
2 0
1 1
3 3
4 4
5 5
6 6
为什么??因为当请求的键不存在时,我们得到值类型的零值。在本例中,值类型为int,因此零值为0
因此,在打印之前,您希望查看地图中是否存在一个键,并且必须使用双值赋值,如下所示:
for i := 1; i < 7; i++ {
if value, exists := mapp[i]; exists {
fmt.Println(i, value)
}
}
这并不是你想要的,但是你可以用map
s直接接近它。
您可以查看更多信息和示例
如果你真的想拥有一个可以删除值的数组,请参考Verran的答案,改用切片。我认为你误解了映射是什么以及它是如何工作的。您不应该将其视为“带间隙的阵列”,而应该将其视为经典
为了回答您的问题,当您使用delete()
时,值将从映射中删除,问题是如何迭代映射的“值”
为了帮助您理解:
mapp := make(map[int]int)
fmt.Println(2, mapp[2])
将打印
2 0
1 1
3 3
4 4
5 5
6 6
为什么??因为当请求的键不存在时,我们得到值类型的零值。在本例中,值类型为int,因此零值为0
因此,在打印之前,您希望查看地图中是否存在一个键,并且必须使用双值赋值,如下所示:
for i := 1; i < 7; i++ {
if value, exists := mapp[i]; exists {
fmt.Println(i, value)
}
}
这并不是你想要的,但是你可以用map
s直接接近它。
您可以查看更多信息和示例
如果您真的想要一个可以删除值的数组,请参阅Verran的答案,并改用切片。您要求每次“弹出”时更改映射的整个键:值关系。使用地图作为基础数据结构肯定不是正确的方法。听起来可能你要求的列表可以删除随机项并保持排序(或者保持其原始顺序,即使这不是排序顺序)。不过,我还不确定你想要它做什么。如果您发布了一个关于您尝试执行的一般任务的更高级别的问题(即关于问题而不是关于建议的解决方案),我们可能可以添加一些有用的内容。您要求地图的整个键:值关系在每次“弹出”时都发生更改。使用地图作为基础数据结构肯定不是正确的方法。听起来可能你要求的列表可以删除随机项并保持排序(或者保持其原始顺序,即使这不是排序顺序)。不过,我还不确定你想要它做什么。如果您发布了一个关于您尝试执行的一般任务的更高级别的问题(即关于问题而不是关于建议的解决方案),我们可能会添加一些有用的内容。