Go語言學習筆記五 map

2021-09-09 09:18:18 字數 2272 閱讀 5539

func main()  //直接建立有值的map 

var m2 map[string]int //map == nil

m3 := make(map[string]string) //map == empty map

}

可以看出,在go中可以建立map的方式還是很多的,就算是不初始化,也可以賦值

在map的key可以使用那些型別?

//獲取key元素

name := studens["name"]

fmt.println(name) //"張三"

取出不存在的元素呢?

//獲取不存在元素

idcard := studens["idcard"]

fmt.println(idcard) //列印空 ""所以我們怎麼判斷,key是否取到了呢?

key是否取到了呢?

idcard,ok := studens["idcard"] //其實 獲取map可以返回兩個引數,第二個就是bool型別,false表示不存在

fmt.println(idcard,ok) // 列印 "" false

if idcard,ok := studens["idcard"];ok else // key idcard not exist

//遍歷 map

fmt.println("----------key value一起遍歷------\n")

//key value一起遍歷

for k, v := range studens

fmt.println("---------只遍歷key-------\n")

//只遍歷key

for k := range studens

fmt.println("---------只遍歷 value-------\n")

//只遍歷 value

for _, v := range studens

遍歷就很簡單了,可以使用range關鍵字

直接使用delete函式刪除

//刪除存在的鍵

delete(studens, "age")

fmt.println("delete age after:",studens) //delete age after: map[***:男 name:張三]

//刪除不存的鍵

delete(studens,"idcard")

fmt.println("delete ont exist key after:",studens) //delete ont exist key after: map[name:張三 ***:男]

列印出字串中最長不重複字元長度

舉例:

"asdjkh" -> "asdjkh" 6個字元

"aaaa" -> "a" 1個字元

"abccba" -> "abc" 3個字元

我們先來整理思路,其實這個題使用map來做就會非常的簡單,如圖:

實現**:

package main

import "fmt"

/**查詢到乙個字串中

最長不重複字串

例如:asdasdss -> asd

*/func findmaxnorepeatstring(s string) int else

keysindex[v] = i

}return lenth

}func main()

思路是對的,也出現結果了,但是其實還是有bug的.

fmt.println(findmaxnorepeatstring("我是小智"))  //8

fmt.println(findmaxnorepeatstring("小智智小")) //6

發現這個 8 和 6 是什麼鬼?想到搞清楚這個問題,就需要了解,go的字串編碼,go中是使用utf編碼(可變長度編碼).

下章專門講解 go的string編碼.

作者所有的學習原始碼在 go學習原始碼github位址,如果覺得有用的話幫小智貢獻乙個star?

Go語言學習筆記 map

學習筆記根據 無聞 go語言基礎教程 整理 package main import fmt sort func main 普通建立方式 func test1 fmt.println m map 使用make關鍵字建立 func test2 直接宣告和賦值建立 func test3 使用更簡單的方式 ...

go語言學習筆記 map

理解 map是由一組無序的鍵key值value對集合的內建型別,可以通過鍵來獲取對應的值,map和slices一樣,也是引用型別 注意 map之間不能使用 操作符來判斷 建立map 語法 map type of key type of value var mymap map string int n...

go語言學習筆記 map

go語言內建有map這種資料結構,它由無序的鍵值對組成,跟大部分語言中的map用法非常相似。它的鍵不能由可變型別 引用語義 的結構型別擔當,如切片 陣列 函式等等。map只有len,沒有cap。我們可以直接定義,或者通過make函式建立,通過make函式建立時,可以指定容量。package main...