c++ map初始化同时赋值_Golang学习笔记五--map
生活随笔
收集整理的這篇文章主要介紹了
c++ map初始化同时赋值_Golang学习笔记五--map
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
map的創建
func main() {//創建 mapstudens := map[string]string{"name": "張三","age": "18","sex": "男",} //直接創建有值的map var m2 map[string]int //map == nilm3 := make(map[string]string) //map == empty map }可以看出,在go中可以創建map的方式還是很多的,就算是不初始化,也可以賦值
map key的類型
在map的key可以使用那些類型?
- 首先map是使用哈希表的,必須可以比較相等
- 除了slice,map,function 的內建類型其他的都可以作為key
- struct 類型不包含以上字段的也可以作為key(struct 類型后面會專門寫道)
map取值
//獲取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) // 打印 "" falseif idCard,ok := studens["idCard"];ok {fmt.Println(idCard)}else {fmt.Println("key idCard not exist")}// key idCard not existmap遍歷
//遍歷 mapfmt.Println("----------key value一起遍歷------n")//key value一起遍歷for k, v := range studens {fmt.Println(k,v)}fmt.Println("---------只遍歷key-------n")//只遍歷keyfor k := range studens {fmt.Println(k)}fmt.Println("---------只遍歷 value-------n")//只遍歷 valuefor _, v := range studens {fmt.Println(v)}遍歷就很簡單了,可以使用range關鍵字
map刪除
直接使用delete函數刪除
//刪除存在的鍵delete(studens, "age")fmt.Println("delete age after:",studens) //delete age after: map[sex:男 name:張三]//刪除不存的鍵delete(studens,"idCard")fmt.Println("delete ont exist key after:",studens) //delete ont exist key after: map[name:張三 sex:男]map小測試
打印出字符串中最長不重復字符長度
舉例:
"asdjkh" -> "asdjkh" 6個字符 "aaaa" -> "a" 1個字符 "abccba" -> "abc" 3個字符我們先來整理思路,其實這個題使用map來做就會非常的簡單,如圖:
實現代碼:
package mainimport "fmt"/** 查找到一個字符串中 最長不重復字符串例如: asdasdss -> asd */func findMaxNoRepeatString(s string) int {start := 0keysIndex := make(map[byte]int)lenth := 0for i, v := range []byte(s) { //這里將字符串轉為 byte數組的原因,string遍歷每一個元素是int32類型lastIndex, ok := keysIndex[v]if ok && lastIndex >= start {start = lastIndex + 1} else {lenth = i - start + 1}keysIndex[v] = i}return lenth}func main() {fmt.Println(findMaxNoRepeatString("abc")) //3fmt.Println(findMaxNoRepeatString("abccba")) //3fmt.Println(findMaxNoRepeatString("aaaaa")) //1fmt.Println(findMaxNoRepeatString("")) //0fmt.Println(findMaxNoRepeatString("asdfghjk")) //8 }思路是對的,也出現結果了,但是其實還是有bug的.
fmt.Println(findMaxNoRepeatString("我是小智")) //8fmt.Println(findMaxNoRepeatString("小智智小")) //6發現這個 8 和 6 是什么鬼?想到搞清楚這個問題,就需要了解,go的字符串編碼,go中是使用utf編碼(可變長度編碼). 下章專門講解go的string編碼.
作者所有的學習源碼在 go學習源碼github地址,如果覺得有用的話幫小智貢獻一個star
總結
以上是生活随笔為你收集整理的c++ map初始化同时赋值_Golang学习笔记五--map的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 前端页面传过来的值怎么防止篡改
- 下一篇: 月经量少吃什么好(月经量少吃什么好排血多