返回
Go语言的数组与切片

老雷go语言视频教程之数组与切片


一、数组

数组是具有相同 唯一类型 的一组以编号且长度固定的数据项序列

1、数组定义

var a1 [5]int

2、数组赋值

a1[0]

a1[0]=1;

var a2=[5]int{5,4,3,2,1}

3、多维数组:数组中包含数组

var b1 [2][3]int

4、数组长度:len

m:=len(b1)

二、切片

切片是一个 长度可变的数组

1、切片定义

var identifier []type

切片可由已定义数组,赋值

var a1=[5]int{1,2,3,4,5}

var slice1 []type = a1[0:3]

数组截取

a1[start:end] a1[0:] a1[:2] a1[2:4]

2、make

切片可以通过make创建赋值

var slice1 []type = make([]type, len)

var s1=make([]int,5);

3.copy 复制一个数组到切片

copy(to, from)

4.append 向切片添加成员

append(a1, 4, 5, 6)

课后练习

1、定义一个数组,含小明、小王、小李,并循环打印出来

2、定义一个二位数组,

小明 语文 90 数学 60

小王 语文 90 数学 60

小李 语文 90 数学 60

并循环打印出来

package main

import (
	"fmt"
)

func main() {
	var a1 [5]int
	a1[4] = 23
	fmt.Print(a1)
	var a2 [5]string
	a2[2] = "第二个"
	fmt.Print(a2)
	//获取数组长度
	var m = len(a2)
	fmt.Print(m)
	//赋值声明
	var a3 = [5]int{5, 4, 3, 2, 1}
	fmt.Print(a3)
	var a4 = [5]string{3: "哈哈", 4: "hoho"}
	fmt.Print(a4)
	//循环打印
	for i := 0; i < m; i++ {
		fmt.Printf("第 %d 个值= %s :", i, a2[i])
	}
	//
	for i, s := range a2 {
		fmt.Printf("第 %d 个值= %s :", i, s)
	}
	//多维数组
	var b1 [2][3]int
	b1[0][0] = 1
	b1[0][2] = 3
	b1[1][2] = 4
	fmt.Print(b1)
	//嵌套循环for
	for i := 0; i < 2; i++ {
		for j := 0; j < 3; j++ {
			fmt.Println(b1[i][j])
		}
	}

}
package main

import "fmt"

func main() {
	//切片
	var a1 = [5]int{1, 2, 3, 4, 5}
	var q1 []int
	q1 = a1[:3]
	q1[2] = 9
	fmt.Println(q1)
	//make
	q2 := make([]int, 10)
	q2[8] = 33
	fmt.Println(q2)
	//copy
	sl_from := []int{1, 2, 3}
	sl_to := make([]int, 10)

	n := copy(sl_to, sl_from)
	fmt.Println(sl_to)
	fmt.Printf("Copied %d elements\n", n) // n == 3
	//append
	sl3 := []int{1, 2, 3}
	sl3 = append(sl3, 4, 5, 6)
	fmt.Println(sl3)
}