go语言 – 访问map中的元素

map[key]是访问map元素的语法。

package main

import (  
    "fmt"
)

func main() {  
    personSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    personSalary["mike"] = 9000
    employee := "jamie"
    fmt.Println("Salary of", employee, "is", personSalary[employee])
}

上面的程序检索并打印员工jamie的工资。该程序输出Salary of jamie is 15000

元素不存在,返回0值

如果一个元素不存在,映射将返回该元素类型的零值。例如, 访问personSalary映射一个不存在的元素,那么将会返回int0值。

package main

import (  
    "fmt"
)

func main() {  
    personSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    personSalary["mike"] = 9000
    employee := "jamie"
    fmt.Println("Salary of", employee, "is", personSalary[employee])
    fmt.Println("Salary of joe is", personSalary["joe"])
}

以上程序的输出为

Salary of jamie is 15000  
Salary of joe is 0  

上面的程序将joe的工资返回为0, 说明键joe不存在。程序也没有报任何运行时错误。

判断元素是否存在

如果我们想知道一个键是否存在于映射中,该怎么办?

value, ok := map[key]  

上面的语法用于查明某个键是否在映射中存在。如果ok为真,则该键存在,其值存于value中,否则该键不存在。

package main

import (  
    "fmt"
)

func main() {  
    personSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    personSalary["mike"] = 9000
    newEmp := "joe"
    value, ok := personSalary[newEmp]
    if ok == true {
        fmt.Println("Salary of", newEmp, "is", value)
    } else {
        fmt.Println(newEmp,"not found")
    }

}

在上述程序中,value, ok := personSalary[newEmp]okok值为false,因为joe不存在。

程序会输出:

joe not found  

遍历map中的元素

for循环的range形式可用于遍历映射中的所有元素。

package main

import (  
    "fmt"
)

func main() {  
    personSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    personSalary["mike"] = 9000
    fmt.Println("All items of a map")
    for key, value := range personSalary {
        fmt.Printf("personSalary[%s] = %d\n", key, value)
    }

}

以上程序输出,

All items of a map  
personSalary[mike] = 9000  
personSalary[steve] = 12000  
personSalary[jamie] = 15000  

注意,在使用for range时,不能保证每次执行程序时,从映射中检索值的顺序都是相同的。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载