day06 go map

染指未来發表於2024-07-02

什麼是 map

  • map 是什麼。類似於字典
    • 無順序
    • 鍵值對
    • 引用型別
package main

import "fmt"

func main() {

	/*
		- map 是什麼。類似於字典
			- 特點:
				- 無順序
				- 鍵值對
				- 引用型別
	*/

	// 宣告 map

	var map01 map[int]string
	fmt.Printf("map01 = %v,型別:%T\n", map01, map01)
	if map01 == nil {
		fmt.Println("空map")
	}

	// 使用 make 建立 map
	var map02 = make(map[int]string)
	fmt.Println("make 定義 map:", map02)

	// 初始化map。定義map,給map賦資料
	var map03 = map[string]int{"go": 1, "java": 2}
	fmt.Println(map03)
	fmt.Printf("map03型別:%T", map03)

}

map 使用

package main

import "fmt"

func main() {
	// 使用 map
	// 1. 初始化map
	var map04 = make(map[int]int)
	map04[1] = 123
	map04[3] = 222
	map04[4] = 675423
	fmt.Println(map04)

	// 2. map 透過key取值
	fmt.Println(map04[1])
	fmt.Println(map04[2]) // 不存在的key 返回 0 / 空

	// 判斷 key 是否存在map。  value = map[key] 隱藏返回值 ok-idiom,可選引數
	value, ok := map04[1]
	value1, ok1 := map04[2]
	fmt.Println("map中的key是否存在01:", value, ok) // 如果 key 存在 。 ok 結果為true,否則為false
	if ok {
		fmt.Println("map04中存在key : 1")
	} else {
		fmt.Println("map04中不存在key: 1")
	}
	fmt.Println("map中的key是否存在02:", value1, ok1) // 如果 key 存在 。 ok 結果為true,否則為false

	// 3. 修改 map資料
	fmt.Println("修改前:", map04)
	map04[4] = 200
	fmt.Println("修改後:", map04)

	// 4. delete 刪除map中的資料
	fmt.Println("delete 刪除map某個key前:", map04)
	delete(map04, 4)
	fmt.Println("delete 刪除map某個key後:", map04)

	// 5. 獲取map的長度 len。 map沒有容量
	fmt.Println("map04的長度", len(map04))

	// 6. 遍歷map
	for k, v := range map04 {
		// k 是鍵
		// v 是值
		fmt.Println("for range 遍歷---", "key:", k, "value:", v)
	}

}

map 和 切片結合

package main

import "fmt"

func main() {

	// map 和 slice 結合使用

	var userMap1 = make(map[string]string)
	userMap1["name"] = "jack"
	userMap1["age"] = "19"
	userMap1["sex"] = "man"
	userMap1["addr"] = "zh"

	var userMap2 = make(map[string]string)
	userMap2["name"] = "lisi"
	userMap2["age"] = "30"
	userMap2["sex"] = "woman"
	userMap2["addr"] = "zh"

	var userMap3 = map[string]string{"name": "zhangsna", "age": "30"}

	// 將 userMap1 和 userMap2 和 userMap3 儲存到切片
	userDatas := make([]map[string]string, 0, 10)
	userDatas = append(userDatas, userMap1, userMap2, userMap3)
	fmt.Println("切片:", userDatas)

	// 遍歷 userDatas 切片
	for _, data := range userDatas {
		fmt.Println(data["name"], data["age"])
	}

}

相關文章