@@ -57,7 +57,7 @@ func main() {
5757 personSalary[" mike" ] = 9000
5858 fmt.Println (" personSalary map contents:" , personSalary)
5959}
60- ```
60+ ```
6161
6262上面的程序输出:` personSalary map contents: map[steve:12000 jamie:15000 mike:9000] ` 。
6363
@@ -78,13 +78,13 @@ func main() {
7878 personSalary[" mike" ] = 9000
7979 fmt.Println (" personSalary map contents:" , personSalary)
8080}
81- ```
81+ ```
8282
8383上面的程序在声明 personSalary 的同时向其中插入了两个元素。接着插入了一个以 "mike" 为键的元素。程序的输出为:
8484
8585``` golang
8686personSalary map contents: map [steve:12000 jamie:15000 mike:9000 ]
87- ```
87+ ```
8888
8989` string ` 并不是可以作为键的唯一类型,其他所有可以比较的类型,比如,布尔类型,整型,浮点型,复数类型都可以作为键。如果你想了解更多关于可比较类型的话,请参阅:http://golang.org/ref/spec#Comparison_operators
9090
@@ -108,7 +108,7 @@ func main() {
108108 employee := " jamie"
109109 fmt.Println (" Salary of" , employee, " is" , personSalary[employee])
110110}
111- ```
111+ ```
112112
113113上面的程序非常简单。员工 ` jamie ` 的工资被取出并打印。程序的输出为:` Salary of jamie is 15000 ` 。
114114
@@ -131,22 +131,22 @@ func main() {
131131 fmt.Println (" Salary of" , employee, " is" , personSalary[employee])
132132 fmt.Println (" Salary of joe is" , personSalary[" joe" ])
133133}
134- ```
134+ ```
135135
136136上面的程序输出为:
137137
138138``` golang
139139Salary of jamie is 15000
140140Salary of joe is 0
141- ```
141+ ```
142142
143143上面的程序返回 ` joe ` 的工资为` 0 ` 。我们没有得到任何运行时错误说明键 joe 在 ` personSalary ` 中不存在。
144144
145145我们如何检测一个键是否存在于一个 map 中呢?可以使用下面的语法:
146146
147147``` golang
148148value , ok := map [key]
149- ```
149+ ```
150150
151151上面的语法可以检测一个特定的键是否存在于 map 中。如果 ` ok ` 是 ` true ` ,则键存在,value 被赋值为对应的值。如果 ` ok ` 为 ` false ` ,则表示键不存在。
152152
@@ -172,13 +172,13 @@ func main() {
172172 }
173173
174174}
175- ```
175+ ```
176176
177177在上面的程序中,第 15 行,` ok ` 应该为 ` false ` ,因为 ` joe ` 不存在。因此程序的输出为:
178178
179179``` golang
180180joe not found
181- ```
181+ ```
182182
183183range for 可用于遍历 map 中所有的元素(译者注:这里 range 操作符会返回 map 的键和值)。
184184
@@ -200,7 +200,7 @@ func main() {
200200 fmt.Printf (" personSalary[%s ] = %d \n " , key, value)
201201 }
202202}
203- ```
203+ ```
204204
205205上面的程序输出如下:
206206
@@ -209,7 +209,7 @@ All items of a map
209209personSalary[mike] = 9000
210210personSalary[steve] = 12000
211211personSalary[jamie] = 15000
212- ```
212+ ```
213213
214214值得注意的是,因为 map 是无序的,因此对于程序的每次执行,不能保证使用 range for 遍历 map 的顺序总是一致的。
215215
@@ -235,14 +235,14 @@ func main() {
235235 fmt.Println (" map after deletion" , personSalary)
236236
237237}
238- ```
238+ ```
239239
240240上面的程序删除以 ` steve ` 为键的元素。程序输出为:
241241
242242``` golang
243243map before deletion map [steve:12000 jamie:15000 mike:9000 ]
244244map after deletion map [mike:9000 jamie:15000 ]
245- ```
245+ ```
246246
247247## map 的大小
248248
@@ -264,7 +264,7 @@ func main() {
264264 fmt.Println (" length is" , len (personSalary))
265265
266266}
267- ```
267+ ```
268268
269269上面程序中,` len(personSalary) ` 获取 ` personSalary ` 的大小。上面的程序输出:` length is 3 ` 。
270270
@@ -290,14 +290,14 @@ func main() {
290290 newPersonSalary[" mike" ] = 18000
291291 fmt.Println (" Person salary changed" , personSalary)
292292}
293- ```
293+ ```
294294
295295上面的程序中,第 14 行,` personSalary ` 赋值给 ` newPersonSalary ` 。下一行,将 ` newPersonSalary ` 中 ` mike ` 的工资改为 ` 18000 ` 。那么在 ` personSalary ` 中 ` mike ` 的工资也将变为 ` 18000 ` 。程序的输出如下:
296296
297297``` golang
298298Original person salary map [steve:12000 jamie:15000 mike:9000 ]
299299Person salary changed map [jamie:15000 mike:18000 steve:12000 ]
300- ```
300+ ```
301301
302302将 map 作为参数传递给函数也是一样的。在函数中对 map 的任何修改都会影响在调用函数中看到。
303303
@@ -319,15 +319,17 @@ func main() {
319319 if map1 == map2 {
320320 }
321321}
322- ```
322+ ```
323323
324324上面的程序将会报错:` invalid operation: map1 == map2 (map can only be compared to nil) ` 。
325325
326326比较两个 map 是否相等的方式是一一比较它们的元素是否相等。我会鼓励你为此编写一个程序,使其工作:)
327327
328328我(原文作者)已经将我们讨论的所有概念汇总到一个程序中,你可以从 [ github] ( https://github.com/golangbot/arraysandslices ) 下载。
329329
330- ## 知识扩展
330+ 希望你喜欢阅读。请留下宝贵的意见和反馈:)
331+
332+ ## 以下为扩展知识
331333
332334[ Go编程基础视频教程笔记] ( https://study.163.com/course/courseLearn.htm?courseId=306002#/learn/video?lessonId=421019&courseId=306002 )
333335
@@ -340,11 +342,12 @@ import (
340342)
341343
342344func main (){
343- // 方式一
344- var m map [int ]string // 声明一个map
345+ // 方式一
346+ var m map [int ]string // 声明一个map,此时的 map == nil
345347 fmt.Println (m)
346- m = map [int ]string {} // 初始化一个map
348+ m = map [int ]string {} // 初始化一个map,此时的 map != nil,是map[]
347349 fmt.Println (m)
350+ // 以上两种的区别在于有没有被初始化容量
348351
349352 // 方式二
350353 var m2 map [int ]string = map [int ]string {}
@@ -353,7 +356,18 @@ func main(){
353356 // 方式三
354357 m3 := map [int ]string {}
355358 fmt.Println (m3)
356-
359+
360+ // 方式四
361+ m4 := map [string ]string {
362+ " name" :" Tinywan" ,
363+ " school" :" BAT_UN"
364+ }
365+ fmt.Println (m4)
366+ m5 := make (map [string ][string ])
367+ m5[" name" ] = " Linux"
368+ m5[" school" ] = " Unix"
369+ // 注意:m4和m5两种初始化的方式等价
370+
357371 // 设置、获取、删除
358372 m3[1 ] = " Tinywan"
359373 a := m3[1 ]
@@ -414,6 +428,4 @@ func main(){
414428 sort.Ints (slice01)
415429 fmt.Println (slice01) // 有序的数组:[1 2 3 4 5 6]
416430}
417- ```
418-
419- 希望你喜欢阅读。请留下宝贵的意见和反馈:)
431+ ```
0 commit comments