如何将 int 添加到 slice

新手上路,请多包涵

我是 Go 的新手,因此我的问题可能看起来有点天真。

我有一个我使用创建的切片

var x []int;
for i := 2; i < 10; i += 2 {
    x = append(x, i);
}

我想在这个切片前加上一个整数,比如

x = append(2, x)

但显然它不会工作,因为 append 需要一个切片作为第一个参数。

我试过 这个,但它只适用于字符串,在我的情况下不起作用。

原文由 coda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 543
2 个回答

使用切片 复合文字[]int{1} ,例如:

 package main

import (
    "fmt"
)

func main() {
    var x []int
    for i := 2; i < 10; i += 2 {
        x = append(x, i)
    }
    fmt.Println(x)

    x = append([]int{1}, x...)

    fmt.Println(x)
}

游乐场:https: //play.golang.org/p/Yc87gO7gJlD

输出:

 [2 4 6 8]
[1 2 4 6 8]


然而,这个更高效的版本可能会进行更少的分配,只有在没有空闲切片容量时才需要分配。

 package main

import (
    "fmt"
)

func main() {
    var x []int
    for i := 2; i < 10; i += 2 {
        x = append(x, i)
    }
    fmt.Println(x)

    x = append(x, 0)
    copy(x[1:], x)
    x[0] = 1

    fmt.Println(x)
}

游乐场:https: //play.golang.org/p/fswXul_YfvD

输出:

 [2 4 6 8]
[1 2 4 6 8]


好的代码必须是可读的。在 Go 中,我们经常将实现细节隐藏在函数中。 Go 编译器正在优化编译器,内联小而简单的函数(如 prependInt )。

 package main

import (
    "fmt"
)

func prependInt(x []int, y int) []int {
    x = append(x, 0)
    copy(x[1:], x)
    x[0] = y
    return x
}

func main() {
    var x []int
    for i := 2; i < 10; i += 2 {
        x = append(x, i)
    }
    fmt.Println(len(x), cap(x), x)

    x = prependInt(x, 1)

    fmt.Println(len(x), cap(x), x)
}

游乐场:https: //play.golang.org/p/wl6gvoXraKH

输出:

 4 4 [2 4 6 8]
5 8 [1 2 4 6 8]


请参阅 Go SliceTricks

原文由 peterSO 发布,翻译遵循 CC BY-SA 4.0 许可协议

当前版本是go1.14.11

没有 for 循环的前置:

 package main

import "fmt"
func main () {
  data := []int{1, 2, 3, 4}
  fmt.Println(data)
  data = append([]int{99}, data...)
  fmt.Println(data)
}

示例形式: https ://codingair.wordpress.com/2014/07/18/go-appendprepend-item-into-slice/

使用整数:https: //play.golang.org/p/gaLhB5_d1Iu

原文由 sanchezcl 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题