go语言学习笔记五 数组,切片,map

1 数组 值类型

package main

import "fmt"

func main() {
	// 数组定义 名称 [数量] 类型
	var array1 [5] int
	// 数组定义 名称 [数量] 类型 初始化
	array2 := [3] int{1,3,5}
	// 数组定义多个int ...
	array3 := [...] int{2,4,6,8,10}
	// 二维数组定义
	var array4 [2][3] bool
	fmt.Printf("array1:%v\narray2:%v\narray3:%v\narray4:%v\n",array1, array2,array3,array4)
	// 数组遍历
	for i, v := range array3{
		fmt.Printf("循环 index:%v;value:%v\n", i, v)
	}
}

输出

array1:[0 0 0 0 0]
array2:[1 3 5]
array3:[2 4 6 8 10]
array4:[[false false false] [false false false]]
循环 index:0;value:2
循环 index:1;value:4
循环 index:2;value:6
循环 index:3;value:8
循环 index:4;value:10

2 切片 类似python中的列表

package main

import "fmt"

// 定义更新第0个元素的函数
func updateSlice(arr []int) []int {
	arr[0] = 100
	return arr
}

func main() {
	// 定义数组
	arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
	fmt.Println("1.arr", arr)
	fmt.Println("2.arr[2:6]", arr[2:6])
	fmt.Println("3.arr[:6]", arr[:6])
	fmt.Println("4.arr[2:]", arr[2:])
	fmt.Println("5.arr[:]", arr[:])
	// 更新切片元素,底层的数组也会被修改
	att2 := updateSlice(arr[:])
	fmt.Println("6.updateSlice:", att2)
	fmt.Println("7.arr:", arr)
	fmt.Println("8.arr[:]:", arr[:])
	arr3 := arr[0:5]
	fmt.Println("9.arr3=", arr3, "arr=", arr)
	// append 增加元素会修改底层数组att的值
	arr4 := append(arr3, 999)
	fmt.Println("10.arr3=", arr3, "arr=", arr, "arr4=", arr4)
	// 直接定义切片
	arr5 := []int{11, 12, 13}
	fmt.Println("11.arr5=", arr5)
	// 创建一个有5个元素,底层数组为10的切片
	arr6 := make([]int, 5, 10)
	fmt.Println("12.arr6=", arr6, "len(arr6)=", len(arr6), "cap(arr6)", cap(arr6))

	fmt.Println("13.arr5=", arr5, "len(arr5)=", len(arr5), "cap(arr5)", cap(arr5))
	// 将arr5的值复制到arr6中
	copy(arr6, arr5)
	fmt.Println("14.arr6=", arr6, "len(arr6)=", len(arr6), "cap(arr6)", cap(arr6))
	fmt.Println("15.arr5=", arr5, "len(arr5)=", len(arr5), "cap(arr5)", cap(arr5))
	// 删除中间元素
	fmt.Println("16.arr6=", arr6, "len(arr6)=", len(arr6), "cap(arr6)", cap(arr6))
	arr6 = append(arr6[:1], arr6[2:]...)
	fmt.Println("17.arr6=", arr6, "len(arr6)=", len(arr6), "cap(arr6)", cap(arr6))
	// 删除第一个元素
	arr6 = arr6[1:]
	fmt.Println("18.arr6=", arr6, "len(arr6)=", len(arr6), "cap(arr6)", cap(arr6))
	// 删除最后一个元素
	arr6 = arr6[:len(arr6)-1]
	fmt.Println("19.arr6=", arr6, "len(arr6)=", len(arr6), "cap(arr6)", cap(arr6))
}

输出

1.arr [0 1 2 3 4 5 6 7]
2.arr[2:6] [2 3 4 5]
3.arr[:6] [0 1 2 3 4 5]
4.arr[2:] [2 3 4 5 6 7]
5.arr[:] [0 1 2 3 4 5 6 7]
6.updateSlice: [100 1 2 3 4 5 6 7]
7.arr: [100 1 2 3 4 5 6 7]
8.arr[:]: [100 1 2 3 4 5 6 7]
9.arr3= [100 1 2 3 4] arr= [100 1 2 3 4 5 6 7]
10.arr3= [100 1 2 3 4] arr= [100 1 2 3 4 999 6 7] arr4= [100 1 2 3 4 999]
11.arr5= [11 12 13]
12.arr6= [0 0 0 0 0] len(arr6)= 5 cap(arr6) 10
13.arr5= [11 12 13] len(arr5)= 3 cap(arr5) 3
14.arr6= [11 12 13 0 0] len(arr6)= 5 cap(arr6) 10
15.arr5= [11 12 13] len(arr5)= 3 cap(arr5) 3
16.arr6= [11 12 13 0 0] len(arr6)= 5 cap(arr6) 10
17.arr6= [11 13 0 0] len(arr6)= 4 cap(arr6) 10
18.arr6= [13 0 0] len(arr6)= 3 cap(arr6) 9
19.arr6= [13 0] len(arr6)= 2 cap(arr6) 9

3.map

package main

import "fmt"

func main() {
	// 定义map [key类型]value类型
	m1 := map[string]string {
		"key1": "value1",
		"key2": "value2",
		"key3": "value3",
		"key4": "value4",
	}
	// 使用make定义map
	m2 := make(map[string]int)
	fmt.Println("1.m1:", m1,"m2:",m2)

	// 遍历map
	for k, v := range m1{
		fmt.Println("2.遍历map", k, v)
	}
	// 判断key是否存在
	if keyValue, ok :=m1["key100"]; ok {
		fmt.Println("3.key存在:",keyValue, ok)
	}else{
		fmt.Println("4.key不存在:", keyValue, ok)
	}
	// 删除map元素
	fmt.Println("5.m1:", m1, "len(m1)", len(m1))
	delete(m1, "key1")
	fmt.Println("6.m1:", m1, "len(m1)", len(m1))
}

输出

1.m1: map[key1:value1 key2:value2 key3:value3 key4:value4] m2: map[]
2.遍历map key1 value1
2.遍历map key2 value2
2.遍历map key3 value3
2.遍历map key4 value4
4.key不存在:  false
5.m1: map[key1:value1 key2:value2 key3:value3 key4:value4] len(m1) 4
6.m1: map[key2:value2 key3:value3 key4:value4] len(m1) 3

猜你喜欢

转载自blog.csdn.net/qq_38165374/article/details/105268108