gpt4 book ai didi

go - 删除 slice 中的每个元素

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

当我尝试遍历 slice 并按顺序删除每个元素以打印剩余元素时,我遇到了一些意外行为,使用建议的 Delete 方法来自 SliceTricks .例如,当我尝试循环遍历包含字母 [A B C] 的 slice 时,我希望输出为 [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 更好的方法来实现此目的?

最佳答案

如果你想在没有额外分配的情况下做到这一点,请尝试按所示交换值 in this example :

请注意,这假定您可以随机排列列表内容。如果没有,只需在循环之前复制一次列表,然后执行以下操作。

package main

import "fmt"

func main() {
set := []string{"a", "b", "c"}
for i := range set {
set[0], set[i] = set[i], set[0]
fmt.Println(set[1:])
}
}

输出:

[b c]
[a c]
[a b]

关于go - 删除 slice 中的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289198/

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