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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章