Go学习笔记—数组、切片

Go学习笔记—数组、切片


感谢观看,如有问题,请留言指正!谢谢


1、数组(array)

一维数组

Go语言中,数组是一个固定长度的数列。

创建数组和数组初始化的方法:

  • var a [5]int  //创建定长的数组,同时初始化默认值全为0
    
  • b := [5]int{
          
          1,2,3,4,5}  //自动推导法,在创建数组的同时进行初始化
    
  • var c = [...]int{
          
          1,23,5,623,7}  //不定长数组,再定义数组的同时进行初始化
    

二维数组

  • //二维数组的定义和初始化
    a := [3][2]string{
          
          
        {
          
          "安徽", "芜湖"},
    	{
          
          "江苏", "无锡"},
    	{
          
          "河北", "保定"},
    }
    

数组的长度可以使用内置函数len()来获取

数组的存储类型是单一的,但是你可以组合这些数据来构造多位的数据结构。

可以通过以下例子来全面的了解数组的使用:

func main(){
    
    
	var a [5]int
	fmt.Println("emp:",a)

	a[4] = 100
	fmt.Println("set:",a)
	fmt.Println("get:",a[4])

	fmt.Println("len:",len(a))

	b := [5]int{
    
    1,2,3,4,5}
	fmt.Println("dcl:",b)

	var twoD [2][3]int
	for i:=0;i<2;i++{
    
    
		for j:=0;j<3;j++{
    
    
			twoD[i][j] = i+j
		}
	}
	fmt.Println("2d:",twoD)
}

2、切片(slice)

slice是Go中一个关键的数据类型,是一个比数组更加强大的序列接口。

slice的类型仅由它所包含的元素决定,定义是不需要元素个数。

创建切片和切片初始化的方法:

  • var sli1 []int  //定义一个整型切片,默认为空
    
  • var sli2 = []string{
          
          }  //定义一个字符串切片,虽然没有赋值,但是切片不为空
    
  • sli3 := []int{
          
          }  //自动推导类型,切片不为空
    
  • sli4 := make([]int,4)  //make([]type,len,cap),使用内置函数创建,需要添加[]type,len或者cap,切片不为空
    

    通过代码进行验证:

    func main(){
          
          
    	var sl1 []string
    	if sl1 == nil{
          
          
    		fmt.Println("空切片")
    	}else{
          
          
    		fmt.Println("不是空切片")
    	}
    
    	var sli2 = []int{
          
          }
    	if sli2 == nil{
          
          
    		fmt.Println("空切片")
    	}else{
          
          
    		fmt.Println("不是空切片")
    	}
    
    	sli3 := []int{
          
          }
    	if sli3 == nil {
          
          
    		fmt.Println("空切片")
    	}else{
          
          
    		fmt.Println("不是空切片")
    	}
    }
    
    //空切片
    //不是空切片
    //不是空切片
    

len()函数

内置函数len(),可以求出切片的长度。

func len(v Type) int
//Slice, or map: the number of elements in v; if v is nil, len(v) is zero.
//返回切片中元素的个数,如果切片为空,返回0

cap()函数

内置函数cap(),可以求出切片的容量。

func cap(v Type) int
//Slice: the maximum length the slice can reach when resliced;
//重组切片时,切片可以达到的最大长度

测试代码:

func lenAndCap(t []string) {
    
    
	//获取长度,内置函数len()
	fmt.Println("len:",len(t))
	//获取容量,内置函数cap()
	fmt.Println("cap:",cap(t))
}

append()函数

内置函数append(),可以向已经创建的切片中添加元素。

func append(slice []Type, elems ...Type) []Type
//第一个参数是切片,第二个参数是添加的元素...元素可以有多个,返回值是切片类型
//也可以将后一个切片添加到前一个切片中
//numsSorted := append([]int(nil),nums...)

copy()函数

内置函数copy(),可以向已经创建的切片中拷贝元素。

func copy(dst, src []Type) int
//将原切片中的元素添加到目标切片

测试代码:

func main(){
    
    
	s = append(s,"d")
	s = append(s,"e","f")
    fmt.Println("sel:",c)
	//lenAndCap(s)

	c := make([]string,len(s))
	copy(c,s)    //拷贝,将参数2中的元素拷贝到参数1中
	fmt.Println("cpy:",c)
	lenAndCap(c)
}

//sel: [a b c d e f]
//cpy: [a b c d e f]

slice可以组成多维数据结构。内部的slice长度可以不同。

//构建二维切片
func main(){
    
    
    twoD := make([][]int,3)
    for i := 0;i < 3;i++{
    
    
        innerLen := i+1
        twoD[i] = make([]int,innerLen)
        for j := 0;j < innerLen;j++{
    
    
            twoD[i][j] = i+j
        }
    }
    fmt.Println("2d:",twoD)
}

猜你喜欢

转载自blog.csdn.net/weixin_46435420/article/details/119427260