The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
hcyg

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

  •  
  •   hcyg · Feb 8, 2020 · 4600 views
    This topic created in 2463 days ago, the information mentioned may be changed or developed.
    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 之后得出来的

    Supplement 1  ·  Feb 8, 2020
    count++我代码里面是有的 这里我忘记加上去了
    Supplement 2  ·  Feb 8, 2020
    debug 的时候 map 里面只有一个键有值 其他的都都是 key -> ,打印的时候又是全部都有
    11 replies  •  2020-02-09 12:17:42 +08:00
    znood
    znood
    Feb 8, 2020❤️1
    1
    楼主不妨每次用完 count 给人家 +1 个鸡腿呢😉
    mocos
    mocos
    Feb 8, 2020
    2
    for-range 时 v 是复制切片的的值,然而 v 的指针地址是没变的。所以迭代完成的时候,因为读取的 v 的指针,v 的地址被写入,装入的值也是最后迭代的值
    xsephiroth
    xsephiroth
    Feb 8, 2020 via iPhone
    3
    能取个 idx 或者 count++吗,自己的代码稍微看看吧
    stevenbipt
    stevenbipt
    Feb 8, 2020
    4
    count 值一直没变吧???
    SingeeKing
    SingeeKing
    Feb 8, 2020
    5
    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
    fantastM
    Feb 8, 2020❤️1
    6
    count++ 正解,不过也可以这样
    ```go
    data := map[int]string{
    1: "one",
    2: "tow",
    3: "three",
    }

    var s []string
    for _, val := range data {
    s = append(s, val)
    }
    ```
    gamexg
    gamexg
    Feb 8, 2020
    7
    我习惯这样:

    ``` go

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

    ```
    hcyg
    hcyg
    OP
    Feb 8, 2020
    8
    count++ 我漏加上去 我代码里面是又 count++的
    petelin
    petelin
    Feb 8, 2020 via iPhone
    9
    这是 string
    index90
    index90
    Feb 9, 2020 via iPhone
    10
    Make 的时候你只设了容量,没有设长度
    ikw
    ikw
    Feb 9, 2020 via iPhone
    11
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1677 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 05:14 · PVG 13:14 · LAX 21:14 · JFK 00:14
    ♥ Do have faith in what you're doing.