golang切片類型


切片slice

  • 其本身並不是數組,它指向底層的數組
  • 作為變長數組的替代方案,可以關聯底層數組的局部或全部
  • 為引用類型
  • 可以直接創建或從底層數組獲取生成
  • 使用len()獲取元素個數,cap()獲取容量
  • 一般使用make()創建
  • 如果多個slice指向相同底層數組,其中一個的值改變會影響全部
  • make([]T,len,cap)
  • 其中cap可以省略,則和len的值相同
  • len表示存數的元素個數,cap表示容量

slice的定義方式

package main

import (
	"fmt"
)

func main() {
	/*
	a := [10]int{}
	fmt.Println(a)
	s1 := a[5:]
	// s1 := a[5:len(a)]
	// s1 := a[5:10]
	fmt.Println(s1)
	*/
	s1 := make([]int,3,10)
	fmt.Println(s1,len(s1),cap(s1))
}

slice與底層數組的對應關系

Reslice

  • reslice時索引以被slice的切片為准
  • 索引不可以超過被slice的切片的容量cap()值
  • 索引越界不會導致底層數組的重新分配而是引發錯誤

Append

  • 可以在slice尾部追加元素
  • 可以將一個slice追加到slice的容量則返回原始slice
  • 如果最終長度未超過追加到slice的容量則返回原始slice
  • 如果超過追加到的slice容量則將重新分配數組並拷貝原始數據

copy

package main

import (
	"fmt"
)

func main() {
	s1 := []int{1,2,3,4,5,6}
	s2 := []int{7,8,9}
	// copy(s2,s1)
	copy(s2[2:4],s1[1:3])    // s2: dest, s1: src
        fmt.Println(s2)
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM