我试图使用切片作为队列数据结构,我想出了这个实现,这导致了一个无限循环。这是因为切片不会使用子切片 进行更新。queuequeue[1:]
func badQueue() {
queue := []int{0,1,2,3,4,5}
for len(queue) > 0 {
current, queue := queue[0], queue[1:]
fmt.Println(current, queue)
}
}
0 [1 2 3 4 5]
0 [1 2 3 4 5]
0 [1 2 3 4 5]
0 [1 2 3 4 5]
0 [1 2 3 4 5]
...
我已经发现这个问题与我正在重新声明和(with)而不是分配值的事实有关,这解决了这个问题:currentqueue:=
func goodQueue() {
queue := []int{0,1,2,3,4,5}
var current int
for len(queue) > 0 {
current, queue = queue[0], queue[1:]
fmt.Println(current, queue)
}
}
0 [1 2 3 4 5]
1 [2 3 4 5]
2 [3 4 5]
3 [4 5]
4 [5]
5 []
我知道导致问题的原因,但我不完全理解为什么在这种情况下的重新声明操作与分配的工作方式不同。为什么不使用队列 () 的子切片重新声明队列?queue[1:]
谢谢!
牛魔王的故事
SMILET
qq_笑_17
相关分类