Golang Go语言中 map[int]转[]string 的问题 很神奇
Golang Go语言中 map[int]转[]string 的问题 很神奇
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 之后得出来的
更多关于Golang Go语言中 map[int]转[]string 的问题 很神奇的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
楼主不妨每次用完 count 给人家 +1 个鸡腿呢😉
更多关于Golang Go语言中 map[int]转[]string 的问题 很神奇的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
for-range 时 v 是复制切片的的值,然而 v 的指针地址是没变的。所以迭代完成的时候,因为读取的 v 的指针,v 的地址被写入,装入的值也是最后迭代的值
能取个 idx 或者 count++吗,自己的代码稍微看看吧
count 值一直没变吧???
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)
}
}
count++ 正解,不过也可以这样go<br> data := map[int]string{<br> 1: "one",<br> 2: "tow",<br> 3: "three",<br> }<br><br> var s []string<br> for _, val := range data {<br> s = append(s, val)<br> }<br>
我习惯这样:go<br><br>if data,ok := data.(map[int]string);ok {<br> s := make([]string,0,len(data))<br> for _,v := range data {<br> s=append(s,v)<br> }<br>}<br><br>
count++ 我漏加上去 我代码里面是又 count++的
Make 的时候你只设了容量,没有设长度
在Golang中,将map[int]string
类型转换为[]string
类型,确实是一个常见的需求,但也需要注意一些关键点来确保转换的正确性和效率。
首先,要明确的是,map
是一个无序的数据结构,而slice
(切片)则是有序的。因此,当你从map[int]string
转换到[]string
时,元素的顺序可能会有所不同。如果你需要保持特定的顺序,需要在转换前对map
的键进行排序。
转换的基本步骤是:
- 创建一个空的
[]string
切片。 - 遍历
map
,将每个值(类型为string
)追加到切片中。
示例代码如下:
m := map[int]string{1: "one", 2: "two", 3: "three"}
var s []string
for _, v := range m {
s = append(s, v)
}
// 此时,s为[]string{"one", "two", "three"}(但顺序可能不同,因为map无序)
如果你需要保持特定的顺序(例如按键的升序或降序),可以先对键进行排序,再按照排序后的键遍历map
,将值添加到切片中。
最后,需要注意的是,由于map
的无序性,如果你需要在不同运行或不同环境中保持一致的顺序,显式排序是必要的。希望这能帮助你解决map[int]string
转[]string
的问题!