06 数组和切片

本文详细介绍了Go语言中数组、多维数组和切片的使用方法,包括定义、初始化、遍历以及它们之间的区别。通过示例展示了如何创建、操作和遍历这些数据结构,同时解释了切片的长度、容量以及如何进行元素的追加和拷贝。
摘要由CSDN通过智能技术生成

一、数组

1.定义

//数组的长度是类型的一部分
//如果不初始化,默认值为零值(布尔值为false)
var a1 [4]bool
var a2 [3]int

2.初始化

//初始化1
var a1 [4]bool
var a2 [3]int

a1 = [4]bool{true, true, true, true}
a2 = [3]int{12, 23, 34}

//初始化2
a3 := [4]bool{true, true, true, true}
a4 := [3]int{12, 23, 34}
a5 := [3]int{1223}		//后边自动补0

//初始化3,根据初始值自动推断长度
a6 := [...]int{1, 2, 2, 3, 3, 4}

//初始化4,根据索引初始化
a7 := [5]int{0: 12, 3: 23}

3.遍历

citys := [5]string{"beijing", "shanghai", "taiyuan", "datong", "nanjing"}

//方法1
for i := 0; i < len(citys); i++ {
	fmt.Println(citys[i])
}

//方法2
for i, v := range citys {
	fmt.Println(i, v)
}

二、多维数组

1.定义

//方法1:多维数组定义
var a1 [3][2]int
a1 = [3][2]int{
	[2]int{1, 2},
	[2]int{3, 4},
	[2]int{5, 6},
}

fmt.Println(a1)

//方法2:多维数组定义
var a1 [3][2]int = [3][2]int{
	[2]int{1, 2},
	[2]int{3, 4},
	[2]int{5, 6},
}

2.遍历

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

for _, v := range a1 {
	fmt.Println(v)
}

三、切片

1.定义

//切片定义
var a1 []int = []int{1, 2, 3}
var a2 []string = []string{"hello", "world"}
a2 := []string{"hello", "world"}

2.由数组得到切片

//切片定义
a := [...]int{1, 2, 3, 4, 5, 6, 7}
s1 := a[2:4] //[3 4]
s2 := a[:4]  //[1 2 3 4]
s3 := a[4:]  //[5 6 7]
s4 := a[:]   //[1 2 3 4 5 6 7]

3.切片的长度和容量

a := [...]int{1, 2, 3, 4, 5, 6, 7}
s1 := a[2:4] //[3 4]
s2 := a[:4]  //[1 2 3 4]
s3 := a[4:]  //[5 6 7]

//切片的长度等于切片的元素数量,切片的容量等于底层数组从切片第一个元素到最后的元素数量
fmt.Println(len(a), cap(a))   //7 7
fmt.Println(len(s1), cap(s1)) //2 5
fmt.Println(len(s2), cap(s2)) //4 7
fmt.Println(len(s3), cap(s3)) //3 3

4.切片再切片

a := [...]int{1, 2, 3, 4, 5, 6, 7}
s1 := a[2:]   //[3 4 5 6 7]
s2 := s1[2:4] //[5 6]

fmt.Println(a, s1, s2) 
fmt.Println(len(s2), cap(s2))	//len=2 cap=3

//数组为值类型,切片为引用类型
//修改切片就是修改底层数组
a := [...]int{1, 2, 3, 4, 5, 6, 7}
s := a[:] //[1 2 3 4 5 6 7]

fmt.Println(a) //[1 2 3 4 5 6 7]
s[2] = 100
fmt.Println(a) //[1 2 100 4 5 6 7]

5.切片追加元素append

s1 := []string{"北京", "上海", "深圳"}

//方法1
s1 = append(s1, "广州", "杭州")

//方法2
s2 := []string{"西安", "成都", "南京"}
s1 = append(s1, s2...) //...表示拆开

6.切片拷贝copy

s1 := []string{"北京", "上海", "深圳"}
s2 := []string{"广州", "杭州"}

copy(s1, s2)

fmt.Println(s1) //[广州 杭州 深圳]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值