Golang:覆盖切片的初始元素

我想初始化一个长度为 3 的空整数切片,在切片中存储随机整数,并在每次迭代时对切片进行排序。这段代码实现了:

package main

import (
    "fmt"
    "math/rand"
    "sort"
)

func main() {
    myslice := make([]int, 3)
    for i := 0; i < 10; i++ {
        myslice = append(myslice, rand.Intn(100))
        sort.IntSlice(myslice).Sort()
        fmt.Println(myslice)
    
    }
}

最终结果:[0 0 0 5 23 28 43 45 50 57 68 76 87]但是,我还想在追加新元素之前覆盖初始元素(换句话说,去掉那些零)。由于切片在每次迭代时都进行了排序,因此调用myslice[i] = rand.Intn(100)ifi < 3不一定有效。

我最初的解决方案是编写一个函数来获取 0 的第一个索引i < 3,并用新的随机值替换该索引......但是,我想知道是否有更好的选择来覆盖切片的初始值。

回答

用:

myslice := make([]int, 0, 3)

创建一个[]int长度为 0 和容量为 3的新元素。虽然因为你附加了 3 个以上的元素,但这是毫无意义的;如果您要预分配,请预分配整个内容,如果您不打算预分配整个内容,请使用var myslice []int.

这在 Tour of Go 中有介绍,我强烈建议您阅读。它只需要几分钟,涵盖所有语言基础知识。


以上是Golang:覆盖切片的初始元素的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>