《Go语言实战》笔记——第4章 数组、切片和映射

《Go语言实战》笔记——第4章 数组、切片和映射

1 数组

1. 1一维数组的创建

	//声明一个数组,数组类元素已初始化为零值
	var array_1[5]int
	
	//使用数组字面量声明数组
	array_2:=[5]int{1,2,3,4,5}
	
	//自动计算数据长度
	array_3:=[...]int{1,3,5,7,9}
	
	//初始化时,指定特定元素的值
	array_4:=[5]int{1:10,4:9}
	
	//???在为指针数组赋值之前必须要先声明指针类型
	array_5:=[5]*int{1:new(int)}
	*array_5[1]=20
	
	var array_7_1[3]*string
	array_7_2:=[3]*string{new(string),new(string),new(string)}
	
	*array_7_2[0]="Red"
	*array_7_2[1]="Blue"
	*array_7_2[2]="Green"
	
	array_7_1=array_7_2

1.2. 多维数组的创建

	//声明1
	var array_8[4][2]int
	//声明2,赋值
	array_9:=[4][2]int{{1,2},{3,4},{5,6},{7,8}}
	//声明2,指定外层索引赋值(指定某一行)
	array_10:=[4][2]int{1:{3,4},3:{5,6}}
	//声明2,指定单个元素
	array_11:=[4][2]int{1:{1:4},3:{0:5}}

在这里插入图片描述

2 切片

2.1 切片的创建

//使用长度声明一个切片
slice_1:=make([]string,5)
    	
//使用长度与容量声明一个切片
slice_2:=make([]string,3,5)

//使用切片字面量声明切片
slice_3:=[]string{"Red","Blue","Green","Yellow","Pink"}
slice_4:=[]int{1,2,3,4}

//使用索引声明切片,初始化100个元素
slice_5:=[]string{99:"I'm100"}

//声明nil切片,长度0,容量0
var slice_6[]int

//声明空切片,长度0,容量0
slice_7:=make([]int,0)
slice_8:=[]int{}

2.2 切片增长

//向切片中增加元素,长度<容量,会产生覆盖
slice_9:=[]int{1,2,3,4,5}
slice_10:=slice_9[1:3]
fmt.Println(slice_10)
slice_10=append(slice_10,6)

//长度=容量时,扩充容量(容量<1000时,翻倍,此后1.25倍)
slice_11:=[]int{1,2,3,4}
slice_12:=append(slice_11,5)

//在创建切片时,限制容量
slice_13:=[]string{"Apple","Orange","Plum","Banana","Grape"}
slice_14:=slice_13[2:3:4]

//为防止覆盖元数据,设置容量与长度一样
slice_15:=[]string{"Apple","Orange","Plum","Banana","Grape"}
slice_16:=slice_15[2:3:3]
slice_16=append(slice_16,"Kiwi")
//此时,元数据slice_15没有被覆盖

//将切片追加到切片
slice_17:=[]int{1,2}
slice_18:=[]int{3,4}
fmt.Printf("%v\n",append(slice_17,slice_18...))

2.3 多维切片

//多维切片
slice_19:=[][]int{{10},{100,90}}
fmt.Println(slice_19)
//追加
slice_19[0]=append(slice_19[0],20)
fmt.Println(slice_19)

在这里插入图片描述

3 映射

3.1 创建映射

//创建映射,键:string值:int
dict_1:=make(map[string]int)
fmt.Println(dict_1)
//创建映射,使用映射字面量
dict_2:=map[string]string{"Red":"#da1337","Orange":"#e95a22"}
fmt.Println(dict_2)
//创建空映射
dict_3:=map[int]string{}
fmt.Println(dict_3)
//创建未初始化的映射nil
var dict_4 map[string]string
fmt.Println(dict_4)

3.2 使用切片作为映射的值

//使用切片作为映射的值,但是不可作为键
dict_5:=map[int][]string{}
dict_5[0]=[]string{"liu","hao","yu"}
fmt.Println(dict_5)

3.3. 取值操作

//取值返回健值与这个键是否存在的标志
dict_6:=map[string]string{"Red":"#da1337","Orange":"#e95a22"}
value,exists:=dict_6["Red"]
if exists{
	fmt.Println(value)
}
//若取值键不存在,返回的值是该值对应类型的零值,
//也可以依据这个进行判断(在存储的值不是零值的情况下)
value,exists=dict_6["Blue"]
if value !="" {
	fmt.Println(value)
}

3.4 迭代映射

//迭代映射
dict_7:=map[string]string{
	"AliceBlue":"#f0f8ff",
	"Coral":"#ff7f50",
	"DarkGray":"#a9a9a9",
	"ForestGreen":"#228b22",
}
for key_7,value_7:= range dict_7{
	fmt.Printf("Key:%s \t Value:%s\n",key_7,value_7)
}

3.5. 删除键值对

//删除键值对
dict_8 := map[string]string{
	"AliceBlue":"#f0f8ff",
	"Coral":"#ff7f50",
	"DarkGray":"#a9a9a9",
	"ForestGreen":"#228b22",
}
delete(dict_8,"Coral")
for key_8,value_8 := range dict_8{
	fmt.Printf("Key:%s\tValue:%s\n",key_8,value_8)
}

4.综述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nathaniel2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值