当我尝试使用SliceTricks 中建议的Delete方法遍历切片并按顺序删除每个元素以打印剩余元素时,出现了一些意外行为。例如,当我尝试遍历包含字母的切片时[A B C],我希望输出为[B C], [A C],[A B]按以下顺序:
方法一
package main
import "fmt"
func main() {
a := []string {"A", "B", "C"}
for i, _ := range a {
fmt.Println(append(a[:i], a[i+1:]...))
}
}
然而,这里的输出让我感到惊讶。它输出[B C]三倍。
通过执行以下操作,我最终确实得到了预期的行为:
方法二
package main
import "fmt"
func main() {
a := []string {"A", "B", "C"}
for i, _ := range a {
result := make([]string, 0)
result = append(result, a[:i]...)
result = append(result, a[i+1:]...)
fmt.Println(result)
}
}
是什么导致了方法 1 中的意外行为,除了方法 2 之外,还有没有更好的方法来实现这一点?
人到中年有点甜
相关分类