4.4.例子 在本节中,我们将会介绍两个小例子,第一个例子介绍一维和二维切片,第二个例子介绍映射,包括值不唯一的映射反转,同时也会介绍切片和排序。 目录 作者:Johnson 原文:Go语言开发-集合类型-例子 出处:青梅酒博客 – Plum Wine Blog 原创文章,版权所有,转载…
Go语言开发-集合类型-映射反转
4.3.5.映射反转 如果一个映射的值是唯一的且值的类型和键一样都是被支持类型的话,我们就可以很容易的将该映射进行反转操作。
1 2 3 4 5 6 7 | cityForPopulation := make(map[int]string, len(populationForCity)) for city, population := range populationForCity { cityForPopulation[population] = city } fmt.Println(cityForPopulation) map[12610000:Istanbul 11290000:Beijing 12690000:Mumbai 11620000:Karachi] |
因为populationForCity是map[string]int类型的,所以我们开始创建了一个反转的映射…
Go语言开发-集合类型-键序映射的遍历
4.3.4.键序映射的遍历 在实际使用中,我们经常需要以特定的顺序生成并展示这些数据。下面是一个例子,展示了如何以字母顺序(严格地说,是Unicode码点)输出映射populationForCity中的城市。
1 2 3 4 5 6 7 8 9 10 11 12 13 | cities := make([]string, 0, len(populationForCity)) for city := range populationForCity { cities = append(cities, city) } sort.Strings(cities) for _, city := range cities { fmt.Printf("%-10s %8d\n", city, populationForCity[city]) } Beijing 11290000 Istanbul 12610000 Karachi 11620000 Mumbai 12690000 |
我们首先创建了一个[]s…
Go语言开发-集合类型-修改映射
4.3.3.修改映射 元素,也就是“键-值”对,可以被插入到映射中,也可以从映射中删除掉,且任何键对应的值都可以被修改。请看下面的例子。
1 2 3 4 5 6 7 8 9 10 11 12 | fmt.Println(len(populationForCity), populationForCity) delete(populationForCity, "Shanghai") // Delete fmt.Println(len(populationForCity), populationForCity) populationForCity["Karachi"] = 11620000 // Update fmt.Println(len(populationForCity), populationForCity) populationForCity["Beijing"] = 11290000 // Insert fmt.Println(len(populationForCity), populationForCity) 4 map[Shanghai:13680000 Mumbai:12690000 Istanbul:12610000 Karachi:10620000] 3 map[Mumbai:12690000 Istanbul:12610000 Karachi:10620000] 3 map[Mumbai:12690000 Istanbul:12610000 Karachi:11620000] 4 map[Mumbai:12690000 Istanbul:12610000 Karachi:11620000 Beijing:11290000] |
映射的插入和更新语法是一样:如果给定的键不存在,则将给定的键和值插入到该映射中;而如果存在,则将…
Go语言开发-集合类型-映射查找
4.3.2.映射查找 对于映射的查找操作,Go语言提供了两种相似的语法,都是使用的[]索引操作符。下面是使用这两种语法的几个例子。
1 2 3 4 5 6 7 | population := populationForCity["Mumbai"] fmt.Println("Mumbai's population is", population) population = populationForCity["Emerald City"] fmt.Println("Emerald City's population is", population) Mumbai's population is 12690000 Emerald City's population is 0 |
如果我们查找的键存在,则返回对应的值,如果该键不存在,就返回映射的值的类型的零值。但是,在上面的例子中…
Go语言开发-集合类型-创建和填充映射
4.3.1.创建和填充映射 下面的例子演示了如何创建并填充一个键为string类型值为float64类型的映射。
1 2 3 4 5 6 7 8 | massForPlanet := make(map[string]float64) // Same as: map[string]float64{} massForPlanet["Mercury"] = 0.06 massForPlanet["Venus"] = 0.82 massForPlanet["Earth"] = 1.00 massForPlanet["Mars"] = 0.11 fmt.Println(massForPlanet) map[Venus:0.82 Mars:0.11 Earth:1 Mercury:0.06] |
对于元素个数较少的映射,是否指定其初始容量无关紧要,但是对于元素数量比较多的映射,指定合适的容量可以提高性能。如果我们知…
Go语言开发-集合类型-映射
4.3.映射 Go 语言的映射是一个保存键值对的无序的集合,其容量仅受机器内存限制。映射的键是唯一的且其类型必须支持==和!=操作符,所以大部分内置类型都可以作为键来使用(例如,int、float64、rune、string、可比较的数组、结构体和自定义类型,以及指针)。切片、不可比较的数组和结构体…
Go语言开发-集合类型-排序和查找切片
4.2.4.排序和查找切片 标准库中的sort包提供了对int类型、float64类型和string类型的切片进行排序的函数,检查切片是否已排序的函数和使用二分查找法在已排序的切片中查找特定元素的函数。同时标准库也提供了通用的用于自定义数据的sort.Sort() 和sort.Search()函数。…
Go语言开发-集合类型-修改切片
4.2.3.修改切片 我们可以使用内置的append()函数来为切片追加元素。该函数接受一个被追加的切片和一个或多个要追加的元素作为参数。如果我们需要将一个切片追加到另一个切片,我们就必须要使用…(省略号)操作符来告诉Go语言将要追加的切片作为多个单独的元素。要追加的元素必须要和切片中元…
Go语言开发-集合类型-遍历切片
4.2.2. 遍历切片 一种常见的需求是遍历切片中的所有元素。如果我们想要得到切片中的元素但却不希望修改该元素,我们可以使用for … range循环;如果我们需要修改切片中的元素,我们可以使用带有循环计数器的for循环。对于前者,下面是一个例子。 [crayon-677ee781c55a79603…
Go语言开发-集合类型-索引和切分切片
4.2.1.索引和切分切片 一个切片是一个隐藏数组的引用,且切片的切片也是对同一个隐藏数组的引用。下面的例子可以解释这一点。
1 2 3 4 5 6 7 8 9 | s := []string{"A", "B", "C", "D", "E", "F", "G"} t := s[2:6] fmt.Println(t, s, "=", s[:4], "+", s[4:]) s[3] = "x" t[len(t)-1] = "y" fmt.Println(t, s, "=", s[:4], "+", s[4:]) [C D E F] [A B C D E F G] = [A B C D] + [E F G] [C x E y] [A B C x E y G] = [A B C x] + [E y G] |
当我们修改数据时,不管是通过原始切片s还是通过切片s的切片t,它们的底层数据都会被修改,所以这两个切片都会受…
Go语言开发-集合类型-数组和切片
4.2.数组和切片 Go语言的数组是一个定长的具有相同类型元素的序列,可以通过使用本身就是数组的元素来创建多维数组。 数组的元素使用[]索引操作符来索引,索引从0开始,所以数组的第一个元素是array[0],最后一个元素是array[len(array)-1]。数组是可变的,所以我们可以使用arra…
Go语言开发-集合类型-值、指针和引用类型
4.1.值、指针和引用类型 本节我们将讨论变量保存的是什么(值、指针和引用,包括指向数组、切片和映射的引用),并在接下来的小结中介绍如何使用数组、切片和映射。 通常情况下,Go语言的变量保存的是相应的值,也就是说,我们可以认为变量可以作为其所保存的值,但不包括通道、函数、方法、映射和切片引用,因为它…
Go语言开发-集合类型
4 集合类型 本章第一节介绍了Go语言中的值、指针和及引用类型,因为对于本章其余部分和后续章节,理解这些概念是必要的。Go语言的指针在语法构成和语意上与C和C++中的指针类似,只是Go不支持指针运算,这样就消除了能够影响C和C++程序的一些潜在bug。Go语言也无需使用free()函数或delete…
Go语言开发-字符串-例子: M3u2pls
3.7. 例子: M3u2pls 在本节中,我们将简单介绍一个短小但完整的程序,该程序从命令行中读取给定的后缀名为 .m3u的音乐播放列表文件并输出一个等效的.pls播放列表文件。程序中使用了很多strings包中的函数,同时也讲解了一些新的知识。 下面是从.m3u文件中摘抄出的一些内容,中间使用省…