Golang Go语言中 map[int]转[]string 的问题 很神奇

发布于 1周前 作者 ionicwang 来自 Go语言

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

12 回复

楼主不妨每次用完 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的键进行排序。

转换的基本步骤是:

  1. 创建一个空的[]string切片。
  2. 遍历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的问题!

回到顶部