下面这段代码很神奇

openset · 2018-12-31 11:44:45 · 1585 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-12-31 11:44:45 的主题,其中的信息可能已经有所发展或是发生改变。

谁能解释一下,这段代码运行既不报错,也不是死循环。

m := map[int]string{
    1: "a",
    2: "b",
    3: "c",
}
for k, v := range m {
    m[k*k] = m[k] + m[k]
    fmt.Println("k: ", k, "\tv: ", v)
}
fmt.Println(m)

有疑问加站长微信联系(非本文作者)

第 1 条附言  ·  2019-01-01 10:36:28
m := map[int]string{
    1: "a",
    2: "b",
    3: "c",
    4: "d",
    5: "e",
}
for k, v := range m {
    m[k+5] = m[k] + m[k]
    fmt.Println("k: ", k, "\tv: ", v)
}
fmt.Println(m)

运行输出结果:

k:  1   v:  a
k:  2   v:  b
k:  3   v:  c
k:  4   v:  d
k:  5   v:  e
k:  6   v:  aa
k:  7   v:  bb
k:  8   v:  cc
map[10:ee 11:aaaa 12:bbbb 1:a 2:b 6:aa 9:dd 8:cc 13:cccc 3:c 4:d 5:e 7:bb]
第 2 条附言  ·  2019-01-01 10:36:58

下面2段代码输出结果一样:

s := []int{1, 2, 3}
for i, v := range s {
    s = append(s, s[i]+3)
    fmt.Println("i: ", i, "\tv: ", v)
}
fmt.Println(s)
s := make([]int, 3, 100)
s[0], s[1], s[2] = 1, 2, 3
for i, v := range s {
    s = append(s, s[i]+3)
    fmt.Println("i: ", i, "\tv: ", v)
}
fmt.Println(s)

运行输出结果:

i:  0   v:  1
i:  1   v:  2
i:  2   v:  3
[1 2 3 4 5 6]
第 3 条附言  ·  2019-01-01 10:38:19
s := []int{1, 2, 3}
for i, v := range s {
    s = s[0:2]
    fmt.Println("i: ", i, "\tv: ", v)
}
fmt.Println(s)

运行输出结果:

i:  0   v:  1
i:  1   v:  2
i:  2   v:  3
[1 2]

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1585 次点击  ∙  1 赞  
加入收藏 微博
9 回复  |  直到 2019-01-16 09:36:54
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传