登录
首页 >  Golang >  Go问答

如何在切片前面添加 int

来源:stackoverflow

时间:2024-04-21 14:48:32 183浏览 收藏

大家好,今天本人给大家带来文章《如何在切片前面添加 int》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

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

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

我想在这个切片前面添加一个整数,例如

x = append(2, x)

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

我已经尝试过这个,但它只适用于字符串,并且不适用于我的情况。


解决方案


使用切片composite literal[]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

当前版本是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

今天关于《如何在切片前面添加 int》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>