切片和数组类似,数组是值类型。切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。切片的空间大小是动态变化的,数组则是固定了长度。
例如 var arr [5]int => 定义了长度为5的数组
var slice [ ]int = make ([ ]int, len, cap) , cap(容量) >= len (长度)
练习:随机生成一组数据,并排序好(升序)该数组,要求插入一个元素,最后打印该数组,顺序依然是升序。
package main
import (
"fmt"
"math/rand"
"time"
)
func InsertNum(num int) []int {
var numArr [10]int //声明一个包含10个int元素的数组
var slice []int = make([]int,10) //声明一个大小为10 的切片
var tmp int
for i := 0; i < 10; i ++ {
//设置一个时间种子,避免每次刷新都是同一组数
rand.Seed(time.Now().UnixNano())
n := rand.Intn(100) + 1 // 1 ~ 100
numArr[i] = n
}
for i := 0; i < len(numArr) - 1; i ++ {
for j := 0; j < len(numArr) - 1 - i; j++ {
if (numArr)[j] > (numArr)[j + 1] { //顺序
tmp = (numArr)[j]
(numArr)[j] = (numArr)[j + 1]
(numArr)[j + 1] = tmp
}
}
slice = numArr[:] //切片赋值,从0 ---> (len(numArr) - 1)
slice = append(slice,num) //切片自增一个数值
for i := 0; i < len(slice) - 1; i ++ {
for j := 0; j < len(slice) -1 - i; j ++ {
if slice[j] > slice[j+1] {
tmp = slice[j]
slice[j] = slice[j+1]
slice[j+1] = tmp
}
}
}
}
return slice
}
func main() {
var num int
fmt.Println("输入一个数:")
fmt.Scanln(&num)
fmt.Println(InsertNum(num))
}
输出结果: