Golang:覆盖切片的初始元素
Golang: override initial elements of a slice
我想初始化一个长度为 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)
if i < 3
不一定有效。
我最初的解决方案是编写一个函数来获取 i < 3
的第一个零索引,并用一个新的随机值替换该索引...但是,我想知道是否有更好的选择覆盖切片的初始值。
使用:
myslice := make([]int, 0, 3)
创建一个新的 []int
,长度为 0,容量为 3。虽然因为你追加了 3 个以上的元素,这是毫无意义的;如果你要预分配,预分配整个东西,如果你不打算预分配整个东西,只需使用 var myslice []int
.
This is covered in the Tour of Go,我强烈建议您完成。只需几分钟,涵盖所有语言基础知识。
根据Adrian的建议,修改代码如下:
package main
import (
"fmt"
"math/rand"
"sort"
)
func main() {
var myslice []int
for i := 0; i < 10; i++ {
myslice = append(myslice, rand.Intn(100))
sort.IntSlice(myslice).Sort()
fmt.Println(myslice)
}
}
输出:
[81]
[81 87]
[47 81 87]
[47 59 81 87]
[47 59 81 81 87]
[18 47 59 81 81 87]
[18 25 47 59 81 81 87]
[18 25 40 47 59 81 81 87]
[18 25 40 47 56 59 81 81 87]
[0 18 25 40 47 56 59 81 81 87]
我想初始化一个长度为 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)
if i < 3
不一定有效。
我最初的解决方案是编写一个函数来获取 i < 3
的第一个零索引,并用一个新的随机值替换该索引...但是,我想知道是否有更好的选择覆盖切片的初始值。
使用:
myslice := make([]int, 0, 3)
创建一个新的 []int
,长度为 0,容量为 3。虽然因为你追加了 3 个以上的元素,这是毫无意义的;如果你要预分配,预分配整个东西,如果你不打算预分配整个东西,只需使用 var myslice []int
.
This is covered in the Tour of Go,我强烈建议您完成。只需几分钟,涵盖所有语言基础知识。
根据Adrian的建议,修改代码如下:
package main
import (
"fmt"
"math/rand"
"sort"
)
func main() {
var myslice []int
for i := 0; i < 10; i++ {
myslice = append(myslice, rand.Intn(100))
sort.IntSlice(myslice).Sort()
fmt.Println(myslice)
}
}
输出:
[81]
[81 87]
[47 81 87]
[47 59 81 87]
[47 59 81 81 87]
[18 47 59 81 81 87]
[18 25 47 59 81 81 87]
[18 25 40 47 59 81 81 87]
[18 25 40 47 56 59 81 81 87]
[0 18 25 40 47 56 59 81 81 87]