为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我在从只有 3 个实体的地图创建的数组中得到 6 个条目?

为什么我在从只有 3 个实体的地图创建的数组中得到 6 个条目?

Go
精慕HU 2023-08-07 11:08:52
我对 Go 中的地图类型的理解有一个看似简单的问题。如果我创建一个简单的地图,例如var thisMap = map[string]string {  "8f14e45fceea167a5a36dedd4bea2543": "Charming",  "1679091c5a880faf6fb5e6087eb1b2dc": "Citi",  "e4da3b7fbbce2345d7772b0674a318d5": "Chase",}将键填充到数组中keys := make([]string, len(supportedCards))for k := range supportedCards {    keys = append(keys, k)}然后尝试将这些键连接成一个逗号分隔的值,我可以将其附加到任何字符串fmt.Println(strings.Join(keys,","))我期望结果是8f14e45fceea167a5a36dedd4bea2543,1679091c5a880faf6fb5e6087eb1b2dc,e4da3b7fbbce2345d7772b0674a318d5但我真正看到的是,,,8f14e45fceea167a5a36dedd4bea2543,1679091c5a880faf6fb5e6087eb1b2dc,e4da3b7fbbce2345d7772b0674a318d5为什么迭代映射会创建 6 个条目而不是 3 个?https://play.golang.org/p/Ou67K1Kfvsf
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

keys := make([]string, len(supportedCards))

您创建一个[]string包含三个空元素的 。您可以使用它们的索引来分配它们。

当您稍后附加它时,新条目将添加到末尾,生成长度为 6 的结果,其中前三个为空。


查看完整回答
反对 回复 2023-08-07
?
慕斯王

TA贡献1864条经验 获得超2个赞

除了@xarantolus的答案之外,您可以通过以下方式保持 for-range 循环不变,而不是使用索引:

keys := make([]string, 0, len(supportedCards))

第三个参数是幻灯片的容量。参考: https: //tour.golang.org/moretypes/13


查看完整回答
反对 回复 2023-08-07
  • 2 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信