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 之后得出来的
1
znood 2020-02-08 19:27:01 +08:00 1
楼主不妨每次用完 count 给人家 +1 个鸡腿呢😉
|
2
mocos 2020-02-08 19:27:52 +08:00
for-range 时 v 是复制切片的的值,然而 v 的指针地址是没变的。所以迭代完成的时候,因为读取的 v 的指针,v 的地址被写入,装入的值也是最后迭代的值
|
3
xsephiroth 2020-02-08 19:39:46 +08:00 via iPhone
能取个 idx 或者 count++吗,自己的代码稍微看看吧
|
4
stevenbipt 2020-02-08 19:59:41 +08:00
count 值一直没变吧???
|
5
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) } } |
6
fantastM 2020-02-08 21:22:49 +08:00 1
count++ 正解,不过也可以这样
```go data := map[int]string{ 1: "one", 2: "tow", 3: "three", } var s []string for _, val := range data { s = append(s, val) } ``` |
7
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) } } ``` |
8
hcyg OP count++ 我漏加上去 我代码里面是又 count++的
|
9
petelin 2020-02-08 23:03:47 +08:00 via iPhone
这是 string
|
10
index90 2020-02-09 12:16:43 +08:00 via iPhone
Make 的时候你只设了容量,没有设长度
|
11
zwpaper 2020-02-09 12:17:42 +08:00 via iPhone
|