package main

import (

"fmt"
"sort"

)

// 切片 是go里面用来替代数组的 在定义切边时候需要make初始化方可使用 并且切边是没有del删除的 需要自己编写 切边支持动态扩容 建议在声明切片时候就规定好容量 避免扩容
func main() {

//定义切片 基于数组切片
var a_arry = [...]int{1, 2, 3, 4, 5, 6}
b_arry := a_arry[1:4] //老规则 固头不固尾
fmt.Printf("切片构建数组:%d\n", b_arry)

//切片再次切片
c_arry := b_arry[0:len(b_arry)]
fmt.Printf("切片再次切片:%d", c_arry)

//使用make函数初始化
d_arry := make([]int, 5, 8) //make 函数传入3个参数make([]切片类型,长度,容量)  如果不传容量自动追随长度
fmt.Printf("make初始化:%d\n", d_arry)

//查看切片的容量 长度 //cap 查看切片容量
fmt.Printf("切片:%d,长度:%d,容量:%d", d_arry, len(d_arry), cap(d_arry))

//nil属于引用类型的0 并没有在内存中生成空间
var i_arry []int
var o_arry = []int{}
if i_arry == nil {
    fmt.Println("i_arry is not nil")
}
if o_arry == nil {
    fmt.Println("o_arry is not nil")
}
if len(i_arry) == 0 {
    fmt.Println("i_arry 长度为 空")
}

//循环取切片值  第一种
m_arry := make([]int, 8)
//for _, value := range m_arry {
//    fmt.Println(value)
//}

//循环取切片值 第二种
for i_sum := 1; i_sum < len(m_arry); i_sum++ { //切记用;分割
    fmt.Println(m_arry[i_sum])
}

//切片追加元素
m_arry = append(m_arry, 8)
fmt.Println(m_arry)

//copy进行拷贝切片的值到另一个切边
v_arry := make([]int, 7, 18)
h_arry := make([]int, 7, 12)
h_arry[2] = 12
copy(v_arry, h_arry) //把v_arry 装到 h_arry
h_arry[2] = 14
fmt.Println(h_arry, h_arry)

//删除切片元素
v_arry = make([]int, 8, 19) // 2 3
u_arry := [...]int{}
var v = append(v_arry[0:1], v_arry[3:]...) //切记追加一个数组要...解构  //切记append可以动态扩容
fmt.Println(v, u_arry)

//排序
sort.Ints(v[:]) //v[:]得到一个切片 指向底层数组
fmt.Println(v)

}

最后修改:2022 年 11 月 29 日 03 : 38 PM
感谢您的,打赏!