forked from gobyexample-cn/gobyexample-cn.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmaps.html
228 lines (175 loc) · 9.46 KB
/
maps.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Go by Example 中文版: Map</title>
<link rel=stylesheet href="site.css">
</head>
<script>
onkeydown = (e) => {
if (e.key == "ArrowLeft") {
window.location.href = 'slices';
}
if (e.key == "ArrowRight") {
window.location.href = 'range';
}
}
</script>
<body>
<div class="example" id="maps">
<h2><a href="./">Go by Example 中文版</a>: Map</h2>
<table>
<tr>
<td class="docs">
<p><em>map</em> 是 Go 内建的<a href="http://zh.wikipedia.org/wiki/关联数组">关联数据类型</a>
(在一些其他的语言中也被称为 <em>哈希(hash)</em> 或者 <em>字典(dict)</em> )。</p>
</td>
<td class="code empty leading">
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<a href="https://play.studygolang.com/p/NQfqY9e9nUj"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<pre class="chroma"><span class="kn">import</span> <span class="s">"fmt"</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<pre class="chroma"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>要创建一个空 map,需要使用内建函数 <code>make</code>:<code>make(map[key-type]val-type)</code>。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nx">m</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">int</span><span class="p">)</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>使用典型的 <code>name[key] = val</code> 语法来设置键值对。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nx">m</span><span class="p">[</span><span class="s">"k1"</span><span class="p">]</span> <span class="p">=</span> <span class="mi">7</span>
<span class="nx">m</span><span class="p">[</span><span class="s">"k2"</span><span class="p">]</span> <span class="p">=</span> <span class="mi">13</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>打印 map。例如,使用 <code>fmt.Println</code> 打印一个 map,会输出它所有的键值对。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"map:"</span><span class="p">,</span> <span class="nx">m</span><span class="p">)</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>使用 <code>name[key]</code> 来获取一个键的值。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nx">v1</span> <span class="o">:=</span> <span class="nx">m</span><span class="p">[</span><span class="s">"k1"</span><span class="p">]</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"v1: "</span><span class="p">,</span> <span class="nx">v1</span><span class="p">)</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>内建函数 <code>len</code> 可以返回一个 map 的键值对数量。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"len:"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">m</span><span class="p">))</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>内建函数 <code>delete</code> 可以从一个 map 中移除键值对。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nb">delete</span><span class="p">(</span><span class="nx">m</span><span class="p">,</span> <span class="s">"k2"</span><span class="p">)</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"map:"</span><span class="p">,</span> <span class="nx">m</span><span class="p">)</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>当从一个 map 中取值时,还有可以选择是否接收的第二个返回值,该值表明了 map 中是否存在这个键。
这可以用来消除 <code>键不存在</code> 和 <code>键的值为零值</code> 产生的歧义,
例如 <code>0</code> 和 <code>""</code>。这里我们不需要值,所以用 <em>空白标识符(blank identifier)</em> _ 将其忽略。</p>
</td>
<td class="code leading">
<pre class="chroma">
<span class="nx">_</span><span class="p">,</span> <span class="nx">prs</span> <span class="o">:=</span> <span class="nx">m</span><span class="p">[</span><span class="s">"k2"</span><span class="p">]</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"prs:"</span><span class="p">,</span> <span class="nx">prs</span><span class="p">)</span>
</pre>
</td>
</tr>
<tr>
<td class="docs">
<p>你也可以通过右边的语法在一行代码中声明并初始化一个新的 map。</p>
</td>
<td class="code">
<pre class="chroma">
<span class="nx">n</span> <span class="o">:=</span> <span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="s">"foo"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s">"bar"</span><span class="p">:</span> <span class="mi">2</span><span class="p">}</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"map:"</span><span class="p">,</span> <span class="nx">n</span><span class="p">)</span>
<span class="p">}</span>
</pre>
</td>
</tr>
</table>
<table>
<tr>
<td class="docs">
<p>注意,使用 <code>fmt.Println</code> 打印一个 map 的时候,
是以 <code>map[k:v k:v]</code> 的格式输出的。</p>
</td>
<td class="code">
<pre class="chroma">
<span class="gp">$</span> go run maps.go
<span class="go">map: map[k1:7 k2:13]
</span><span class="go">v1: 7
</span><span class="go">len: 2
</span><span class="go">map: map[k1:7]
</span><span class="go">prs: false
</span><span class="go">map: map[foo:1 bar:2]</span></pre>
</td>
</tr>
</table>
<p class="next">
下一个例子: <a href="range.html">Range 遍历</a>
</p>
<p class="footer">
<a href="https://twitter.com/mmcgrana">@mmcgrana</a> 和<a href="https://eli.thegreenplace.net">Eli Bendersky</a>编写 | <a href="https://github.com/gobyexample-cn">gobyexample-cn</a> 翻译 | <a href="https://github.com/gobyexample-cn/gobyexample/issues">反馈</a> | <a href="https://github.com/gobyexample-cn/gobyexample">源码</a> | <a href="https://github.com/mmcgrana/gobyexample#license">license</a> </p>
</p>
</div>
<script>
var codeLines = [];
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func main() {\u000A');codeLines.push(' m :\u003D make(map[string]int)\u000A');codeLines.push(' m[\"k1\"] \u003D 7\u000A m[\"k2\"] \u003D 13\u000A');codeLines.push(' fmt.Println(\"map:\", m)\u000A');codeLines.push(' v1 :\u003D m[\"k1\"]\u000A fmt.Println(\"v1: \", v1)\u000A');codeLines.push(' fmt.Println(\"len:\", len(m))\u000A');codeLines.push(' delete(m, \"k2\")\u000A fmt.Println(\"map:\", m)\u000A');codeLines.push(' _, prs :\u003D m[\"k2\"]\u000A fmt.Println(\"prs:\", prs)\u000A');codeLines.push(' n :\u003D map[string]int{\"foo\": 1, \"bar\": 2}\u000A fmt.Println(\"map:\", n)\u000A}\u000A');codeLines.push('');
</script>
<script src="site.js" async></script>
</body>
</html>