go - 从 slice 中删除项目

标签 go

我在使用 Golang slice 时遇到了一些问题。

我知道 slice 是指向底层数组的指针,但有些行为感觉有点奇怪。

我试图从一个 slice 中删除一个项目,我设法通过复制 slice 来做到这一点,有没有更好的方法?

在下面的代码中,原始 slice 发生了变化。

package main

import (
    "fmt"
)

func main() {
    mySlice := []int{1,2,3,4,5,6}
    pos := 3

    slicePart1 := mySlice[:pos+1]
    slicePart2 := mySlice[pos+2:]

    fmt.Println(mySlice)
    fmt.Println(slicePart1)
    fmt.Println(slicePart2)
    new := append(slicePart1,slicePart2...)
    fmt.Println(new)
    fmt.Println(mySlice)
}

最佳答案

例如,

package main

import "fmt"

func main() {
    s := []int{1, 2, 3, 4, 5, 6}
    fmt.Println(s)
    i := 3
    fmt.Println(i)
    s = append(s[:i], s[i+1:]...)
    fmt.Println(s)
}

Playground :https://play.golang.org/p/SVQEUE7Rrei

输出:

[1 2 3 4 5 6]
3
[1 2 3 5 6]

或者,如果顺序不重要,

package main

import "fmt"

func main() {
    s := []int{1, 2, 3, 4, 5, 6}
    fmt.Println(s)
    i := 3
    fmt.Println(i)
    s[i] = s[len(s)-1]
    s = s[:len(s)-1]
    fmt.Println(s)
}

Playground :https://play.golang.org/p/lVgKew3ZJNF

输出:

[1 2 3 4 5 6]
3
[1 2 3 6 5]

其他几种方式,参见SliceTricks .

关于go - 从 slice 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806628/

相关文章:

c++ - 用 Go 构建包装 C++

go - 多输入 (fmt.Scanln)

go - 如何使用 'routes' 文件读取 Revel 中的查询参数?

go - 当其中一个关闭时交换 websocket 连接

go - 使用 Negroni 时自定义 HTTP 处理程序可以全局使用还是仅按请求使用?

pointers - 为什么 Go 不允许获取映射值的地址?

ruby - 如何使用 CGO 将字符串从函数返回到 Ruby

docker - 二进制文件是用 'CGO_ENABLED=0' 编译的,go-sqlite3 需要 cgo 才能工作。这是一个 stub

svg - 如何在 Go 中直接包含 SVG 作为 html 部分

go - 使用 go-dockerclient 从自定义注册表下载图像挂起