Go语言学习笔记(三)数组 & 切片 & map
2017-07-18 10:38
639 查看
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959
数组是值类型,因此改变副本的值,不会改变本身的值;
当作为方法的入参传入时将复制一份数组而不是引用同一指针。
通过从0开始的下标索引访问元素值。
数组定义后,长度不能变。
长度是数组类型的一部分,具有不同长度的数组,其类型是不同的。
因此,var a[5] int 和 var a[9]int 是不同的类型。
通过for遍历数组元素
值类型数组赋值,改变副本不会改变自身
模仿切片
key-value的数据结构,又叫字典或关联数组。
map是引用类型。
map声明是不会分配内存的,需要make初始化。
声明并初始化
按照排序好的key,进行遍历
数组 Arrays
数组是同一种数据类型的固定长度的序列。数组是值类型,因此改变副本的值,不会改变本身的值;
当作为方法的入参传入时将复制一份数组而不是引用同一指针。
通过从0开始的下标索引访问元素值。
数组定义
var a []int a = make([]int, 5) var a1 [5]int = [5]int{1, 2, 3, 4, 5} //len:5 content:[1 2 3 4 5] var a2 = [5]int{1, 2, 3, 4, 5} //len:5 content:[1 2 3 4 5] var a3 = [...]int{1, 2, 3, 4, 5} //len:5 content:[1 2 3 4 5] var a4 = [...]int{1: 100, 2: 200} //len:3 content:[0 100 200] var a5 = [...]string{1: "nick", 2: "dawn"} //len:3 content:[ nick dawn]
数组定义后,长度不能变。
长度是数组类型的一部分,具有不同长度的数组,其类型是不同的。
因此,var a[5] int 和 var a[9]int 是不同的类型。
数组使用
通过下标访问,超出会报错arr := [5]int{1, 2, 3} //fmt.Println(arr[5]) //报错
通过for遍历数组元素
func main() { arr := [5]int{1, 2, 3} for i:=0; i<len(arr); i++ { fmt.Println(arr[i]) //12300 } for i,v := range arr{ fmt.Printf("index[%d]:content[%v]\n", i, v) } }
值类型数组赋值,改变副本不会改变自身
func main() { arr := [5]int{1, 2, 3} arr2 := arr arr2[0] = 10 fmt.Println(arr) //[1 2 3 0 0] fmt.Println(arr2) //[10 2 3 0 0] }
package main import ( "fmt" ) type slice struct { pre *[100]int len int cap int } func make1(s slice, cap int) slice { s.pre = new([100]int) s.len = 0 s.cap = cap return s } func modify(s slice) { s.pre[1] = 1000 } func testSlice() { var s1 slice s1 = make1(s1, 10) s1.pre[0] = 100 modify(s1) fmt.Println(s1.pre) } func main() { testSlice() }
模仿切片
map
map在Go语言中是作为一种内建类型存在。key-value的数据结构,又叫字典或关联数组。
map是引用类型。
map声明是不会分配内存的,需要make初始化。
map声明初始化
声明var a map[keytype]valuetype var a map[string]string var a map[string]int var a map[int]string var a map[string]map[string]string //嵌套
声明并初始化
var a map[string]string a = make(map[string]string, 10) a := make(map[string]string, 10) a := make(map[string]string) var a map[string]string = map[string]string{} var a map[string]string = map[string]string{ "A": "A", //注意是逗号 }
map 使用
增删改查
m["name"] = "Nick" // "create" delete(m, "name") // "delete" m["name"] = "Dawn" // "update" name := m["name"] // "read"
读取不异常
name, errbool := m["name"] if !errbool { m["name"] = "Nick" }
二维map
func modify(a map[string]map[string]string) { _, ok := a["name"] if !ok { a["name"] = make(map[string]string) } a["name"]["Nick"] = "suoning" a["name"]["Nicky"] = "manyRou" } func testMap3() { var a map[string]map[string]string a = make(map[string]map[string]string, 10) //初始化一维 a["name"] = make(map[string]string) //初始化二维 modify(a) fmt.Println(a) }
slice of map
Items := make([]map[int][int], 5) For i := 0; i < 5; i++ { items[i] = make(map[int][int]) }
map 排序
先获取所有key,把key进行排序按照排序好的key,进行遍历
import "sort" func testMapSort() { var a map[int]int a = make(map[int]int, 5) a[8] = 10 a[5] = 10 a[2] = 10 a[1] = 10 a[9] = 10 var keys []int for k, _ := range a { keys = append(keys, k) } sort.Ints(keys) for _, v := range keys { fmt.Println(v, a[v]) } }
map 反转
初始化另外一个map,把key、value互换即可func testMapSort1() { var a map[string]int var b map[int]string a = make(map[string]int, 5) b = make(map[int]string, 5) a["name"] = 53 a["ege"] = 10 for k, v := range a { b[v] = k } fmt.Println(b) }
相关文章推荐
- Go语言学习笔记之数组、数组切片和map
- Go语言学习笔记(八)golang 操作 Redis & Mysql & RabbitMQ
- Go语言学习笔记 -- array、slice和map
- Go语言学习笔记(四) [array、slice、map]
- Go语言学习笔记 --- map
- Go语言的数组,切片,set,map
- go语言之行--数组、切片、map
- go语言学习----字符串、数组和切片的应用
- Go语言学习笔记(六)net & net/http
- Go语言4-数组、切片及map
- Go语言学习笔记 --- slice切片
- Go语言学习笔记十三: Map集合
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
- 二、slice和数组的区别,map的注意事项 -go语言笔记
- <<C语言深度剖析>>学习笔记之五:指针与数组
- Go语言学习笔记(四) [array、slice、map]
- Go语言基础入门--数组,切片,map
- Go语言学习笔记(四) [array、slice、map]
- Go语言学习笔记十三: Map集合
- go语言学习-数组切片的创建和使用方法