Go map[int]转[]string 的问题 很神奇

2020-02-08 19:15:10 +08:00
 hcyg
if data,ok := data.(map[int]string);ok {
	s := make([]string,len(data))
	count := 0
	fmt.Println("this is map[int][]string:-->",data)
	for _,v := range data {
		fmt.Println("this is v:-->",v)
		s[count] = v
		fmt.Println("this is s:-->",s)
	}
}

这是一部分的代码 主要是将 map 转成 string 数组,但是结果如下:

this is map[int][]string:--> map[2:32||159_tea222r||0||0 9:32||159_tea2222332r||0||0 19:32||159_tea22345762r||0||0]

this is v:--> 32||159_tea22345762r||0||0
this is s:--> [32||159_tea22345762r||0||0  ]
this is v:--> 32||159_tea2222332r||0||0
this is s:--> [32||159_tea2222332r||0||0  ]
this is v:--> 32||159_tea222r||0||0
this is s:--> [32||159_tea222r||0||0  ]

赋值不了给 s 只有一个可以赋值

如果我是连接成一个字符串就可以 这个 data 是我经过对比 delete 之后得出来的

3214 次点击
所在节点    Go 编程语言
11 条回复
znood
2020-02-08 19:27:01 +08:00
楼主不妨每次用完 count 给人家 +1 个鸡腿呢😉
mocos
2020-02-08 19:27:52 +08:00
for-range 时 v 是复制切片的的值,然而 v 的指针地址是没变的。所以迭代完成的时候,因为读取的 v 的指针,v 的地址被写入,装入的值也是最后迭代的值
xsephiroth
2020-02-08 19:39:46 +08:00
能取个 idx 或者 count++吗,自己的代码稍微看看吧
stevenbipt
2020-02-08 19:59:41 +08:00
count 值一直没变吧???
SingeeKing
2020-02-08 20:36:42 +08:00
if data,ok := data.(map[int]string);ok {
s := make([]string,len(data))
fmt.Println("this is map[int][]string:-->",data)
for i,v := range data {
fmt.Println("this is v:-->",v)
s[i] = v
fmt.Println("this is s:-->",s)
}
}
fantastM
2020-02-08 21:22:49 +08:00
count++ 正解,不过也可以这样
```go
data := map[int]string{
1: "one",
2: "tow",
3: "three",
}

var s []string
for _, val := range data {
s = append(s, val)
}
```
gamexg
2020-02-08 21:35:15 +08:00
我习惯这样:

``` go

if data,ok := data.(map[int]string);ok {
s := make([]string,0,len(data))
for _,v := range data {
s=append(s,v)
}
}

```
hcyg
2020-02-08 22:10:17 +08:00
count++ 我漏加上去 我代码里面是又 count++的
petelin
2020-02-08 23:03:47 +08:00
这是 string
index90
2020-02-09 12:16:43 +08:00
Make 的时候你只设了容量,没有设长度
zwpaper
2020-02-09 12:17:42 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/643051

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX