Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /