设为首页 加入收藏

TOP

Go基础系列(7):map类型(二)
2018-10-26 18:08:26 】 浏览:301
Tags:基础 系列 map 类型
quot;Perl":8, "Python":13, } value,exists := my_map["Perl"] if exists { println("The key exists in map") }

可以将上面两个步骤合并起来,看着更高大上一些:

if value,exists := my_map["Perl"];exists {
    println("key exists in map")
}

方式二:根据map元素返回的value判断。因为该map中的value部分是int类型,所以它的0是数值的0。

my_map := map[string]int{
                "Java":11,
                "Perl":8,
                "Python":13,
            }

value := my_map["Shell"]
if value == 0 {
    println{"not exists in map"}
}

如果map的value数据类型是string,则判断是否为空:

if value == "" {
    println("not exists in map")
}

由于map中的value有可能本身是存在的,但它的值为0,这时就会出现误判断。例如下面的"Shell",它已经存在,但它对应的值为0。

my_map := map[string]int{
                "Java":11,
                "Perl":8,
                "Python":13,
                "Shell":0,
            }

所以,应当使用第一种方式进行判断元素是否存在。

迭代遍历map

因为map是key/value类型的数据结构,key就是map的index,所以range关键字对map操作时,将返回key和value。

my_map := map[string]int{
                "Java":11,
                "Perl":8,
                "Python":13,
                "Shell":23,
            }

for key,value := range my_map {
    println("key:",key," value:",value)
}

获取map中所有的key

Go中没有提供直接获取map所有key的函数。所以,只能自己写,方式很简单,range遍历map,将遍历到的key放进一个slice中保存起来。

package main

import "fmt"

func main() {
    my_map := map[string]int{
        "Java":   11,
        "Perl":   8,
        "Python": 13,
        "Shell":  23,
    }

    // 保存map中key的slice
    // slice类型要和map的key类型一致
    keys := make([]string,0,len(my_map))

    // 将map中的key遍历到keys中
    for map_key,_ := range my_map {
        keys = append(keys,map_key)
    }

    fmt.Println(keys)
}

注意上面声明的slice中要限制长度为0,否则声明为长度4、容量4的slice,而这4个元素都是空值,而且后面append()会直接对slice进行一次扩容,导致append()后的slice长度为map长度的2倍,前一半为空,后一般才是map中的key。

传递map给函数

map是一种指针,所以将map传递给函数,仅仅只是复制这个指针,所以函数内部对map的操作会直接修改外部的map。

例如,addone()用于给map的key对应的值加1。

package main

func main() {
    my_map := map[string]int{
        "Java":   11,
        "Perl":   8,
        "Python": 13,
        "Shell":  23,
    }

    println(my_map["Perl"])   // 8
    addone(my_map,"Perl") 
    println(my_map["Perl"])   // 9
}

func addone(m map[string]int,key string) {
    m[key] += 1
}
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇了解golang的不定参数(... param.. 下一篇Go语言函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目