为什么地图不会返回其值?

时间:2014-08-13 07:20:29

标签: go

我有一个只返回地图值的函数。但是由于某些原因,它并没有这样做。 知道为什么吗?我在这里贴了代码。您也可以使用

播放它

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 个答案:

答案 0 :(得分:9)

您没有使用正确的功能,即使用其键是名称的地图的功能。你可能想要

a := CodeByCountry("Australia")

这很有效。

但是每次需要时创建地图都没有意义。从函数中创建地图创建,并将其放在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)
}

初始化的另一个解决方案,因为它似乎是双射的,将有一个函数添加一对并填充两个映射:

func addInMaps(code,name string) {
     byCode[code] = name
     byName[name] = code
}