Skip to content

Commit 2fc3d73

Browse files
committed
注意:m4和m5两种初始化的方式等价
Signed-off-by: Tinywan <756684177@qq.com>
1 parent 54ad9f0 commit 2fc3d73

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

docs/golang_tutorial_13.md

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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
8686
personSalary 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
139139
Salary of jamie is 15000
140140
Salary of joe is 0
141-
```
141+
```
142142

143143
上面的程序返回 `joe` 的工资为` 0`。我们没有得到任何运行时错误说明键 joe 在 `personSalary` 中不存在。
144144

145145
我们如何检测一个键是否存在于一个 map 中呢?可以使用下面的语法:
146146

147147
```golang
148148
value, 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
180180
joe not found
181-
```
181+
```
182182

183183
range 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
209209
personSalary[mike] = 9000
210210
personSalary[steve] = 12000
211211
personSalary[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
243243
map before deletion map[steve:12000 jamie:15000 mike:9000]
244244
map 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
298298
Original person salary map[steve:12000 jamie:15000 mike:9000]
299299
Person 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

342344
func 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

Comments
 (0)