dpgbh20688
dpgbh20688
2014-08-13 07:20

为什么地图不返回其值?

已采纳

I have a function which simply returns the value of a map. However for some reasons it doesn't do that. Any idea why ? I've pasted here the code. You may also play it using

Try it!

package main

import "fmt"

func main() {    
    a := CountryCode("Australia")    
    fmt.Println(a)    
}

func CountryCode(s string) string {    
    m := make(map[string]string)
    // [snip]
    m["AU"] = "Australia"
    // [snip]
    return m[s]
}

func CodeByCountry(s string) string {
    m := make(map[string]string)
    // [snip]
    m["Australia"] = "AU"
    // [snip]
    return m[s]
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • douchi8503 douchi8503 7年前

    You're not using the right function, the one using the map whose key is a name. You probably want

    a := CodeByCountry("Australia")
    

    This works.

    But it makes no sense to create the map each time you need it. Take the map creation out of the functions, and put it for example in the init :

    package main
    
    import "fmt"
    
    var byCode = make(map[string]string)
    var byName = make(map[string]string)
    
    func init() {
        m := byCode
        m["AF"] = "Afghanistan"
        m["AL"] = "Albania"
        m["DZ"] = "Algeria"
        m["AS"] = "American Samoa"
    
        m = byName
        m["Austria"] = "AT"
        m["Mozambique"] = "MZ"
        m["Solomon Islands"] = "SB"
        m["United States"] = "US"
        m["Anguilla"] = "AI"
        m["Australia"] = "AU"
    }
    
    func CountryCode(s string) string {
        return byCode[s]
    }
    
    func CodeByCountry(s string) string {
        return byName[s]
    }
    
    func main() {
        a := CodeByCountry("Australia")
        fmt.Println(a)
    }
    

    Another solution for the initialization, as it seems bijective, would be to have one function adding a pair and filling both maps :

    func addInMaps(code,name string) {
         byCode[code] = name
         byName[name] = code
    }
    
    点赞 评论 复制链接分享