日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ map初始化同时赋值_Golang学习笔记五--map

發布時間:2024/9/18 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 exist

map遍歷

//遍歷 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。