第四章 go语言 数组、切片和映射 (3)

提供了很多与strings包类似的功能。因为字符串是只读的,逐步构建字符串会导致很多分配和复制,这种情况下,使用bytes.Buffer类型将会更有效。

 

strconv

 

提供了布尔类型、整数、浮点数和对应字符串的相互转换,还提供了双引号转义相关的转换。

 

unicode

 

提供了IsDigitIsLetterIsUpperIsLower等功能,用于给字符分类。

 

 

strings包常用的6个函数,功能参考Go中文帮助文档

 

 

 

 

 

 

 

byte包常用的的6个函数,功能与strings类似。

 

 

 

 

 

 

它们之间的唯一区别就是字符串类型的参数替换成了字节slice类型的参数。

4.3 映射

映射是一个无序的键值对集合,其中所有的键都是不同的,然后通过给定的键可以在常数时间复杂度内检索、更新或删除对应的值。在Go语言中,一个map就是一个哈希表的引用,映射中所有的键都有相同的类型,所有的值也有着相同的类型,但是键和值之间可以是不同的数据类型。

1 声明映射

声明的一般格式为:

var 映射名称 map[]

 

只是声明一个map,它的初始值是nil,也就是没有引用任何哈希表。所以不能向一个nil值的map存入元素。

var ages map[string]int

fmt.Println(age == nil)//”true” 

fmt.Println(len(ages)== 0)//”true” 

 

  2 创建映射

内置的make函数可以创建一个map,创建后可以存入元素。

myMap1 := make(map[string]int)      //创建一个map

myMap2 := make(map[string]int, 100) //创建一个map,初始储存能力为100

myMap3 := map[string]int{

     "str1": 10, "str2": 20, "str3": 30} //直接创建,并初始化

fmt.Println(myMap1, len(myMap1))

fmt.Println(myMap2, len(myMap2))

fmt.Println(myMap3, len(myMap3))

打印结果:

map[] 0

map[] 0

map[str3:30 str1:10 str2:20] 3

 

 

3  元素的赋值和删除

  元素可以直接赋值,内置的delete函数用于删除元素,删除一个不存在的元素,不会造成错误。

 myMap3 := map[string]int{"str1": 10, "str2": 20, "str3": 30} 

fmt.Println(myMap3, len(myMap3))

myMap3["str5"] = 50

fmt.Println(myMap3, len(myMap3))

delete(myMap3, "str")

delete(myMap3, "str3")

fmt.Println(myMap3, len(myMap3))

打印结果:

map[str3:30 str1:10 str2:20] 3

map[str5:50 str1:10 str2:20 str3:30] 4

map[str1:10 str2:20 str5:50] 3

 

 

4 查找元素

有时候可能需要知道对应的元素是否在map中,例如,如果元素类型是一个布尔类型,你可能需要区分一个零值的元素,和因为元素不存在而返回的零值,可以像下面这样使用:

v,ok:=map[key]

if !ok{/*在map中不存在key为键的元素*/}

 

//结合起来使用

if v,ok:=map[key];!ok{/*    */ }

 

在这种场景下,map下标语法将产生两个值;第二个值是一个布尔类型,用于表示元素是否存在。布尔变量一般命名为ok。示例如下:

myMap3 := map[string]int{"str1": 10, "str2": 20, "str3": 30}

if v, ok := myMap3["str2"]; ok {

  fmt.Println(v)

}

 

 

5 遍历映射

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxdzw.html