Go:关于切片(slice)及append的一些用法

切片和数组类似,数组是值类型。切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。切片的空间大小是动态变化的,数组则是固定了长度。

例如 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))
}

输出结果:

Go:关于切片(slice)及append的一些用法

 

上一篇:Slice的概念


下一篇:go数组与切片