美文网首页
Go基础——Map

Go基础——Map

作者: _羊羽_ | 来源:发表于2018-01-11 01:16 被阅读774次

map声明语法为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是key和value之间可以是不同的数据类型。
map中的K对应的key必须是支持==比较运算符的数据类型,比如 整数,浮点数,指针,数组,结构体,接口等。 而不能是 函数,字典,切片这些类型,可以通过测试key是否相等来判断是否已经存在。

声明map

var 变量名称 map[key_type]value_type

注意声明map类型是不会分配内存的。初始化需要make,才会分配内存

创建map

(1)内置的make函数可以创建一个map:

//map_variable := make(map[key_data_type]value_data_type)
ages := make(map[string]int) // mapping from strings to ints

(2)我们也可以用map字面值的语法创建map,同时进行数据的初始化

ages := map[string]int{
    "alice":   31,
    "charlie": 34,
}

map是引用类型

mapAssigned 也是 mapList 的引用,对 mapAssigned 的修改也会影响到 mapLit 的值。

    var mapList map[string]int
    var mapAssigned map[string]int
    mapList = map[string]int{"one": 1, "two": 2}
    mapAssigned = mapList
    fmt.Printf("%p---%p\n", mapAssigned, mapList)
    fmt.Println(mapList["two"])
    fmt.Println(mapAssigned["two"])
    delete(mapAssigned, "two")
    fmt.Println(mapList["two"])
    fmt.Println(mapAssigned["two"])

查找

Map中的元素通过key对应的下标语法访问:

ages["alice"] = 32
fmt.Println(ages["alice"]) // "32"

当从一个 map 中取值时,可选的第二返回值指示这个键是在这个 map 中。这可以用来消除键不存在和键有零值,像 0 或者 "" 而产生的歧义。

 value,ok := ages["alice"]
  fmt.Println(value,ok)

删除

delete函数可以删除元素:

delete(ages, "alice") // remove element ages["alice"]

遍历

使用range风格的for循环实现,

for name, age := range ages {
    fmt.Printf("%s\t%d\n", name, age)
}

遍历map时的key随机化问题

range对Go语言的map做遍历访问时,遍历访问到的key的顺序居然是被随机化的

import (
    "fmt"
    "sort"
)

func main() {
    m := make(map[string]string)
    m["hello"] = "echo hello"
    m["world"] = "echo world"
    m["go"] = "echo go"
    m["is"] = "echo is"
    m["cool"] = "echo cool"

    sorted_keys := make([]string, 0)
    for k, _ := range m {
        sorted_keys = append(sorted_keys, k)
    }

   sort.Strings(sorted_keys)

    for _, k := range sorted_keys {
        fmt.Printf("k=%v, v=%v\n", k, m[k])
    }
}
}

相关文章

  • 10.map

    Go语言基础之map | Golang Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 ...

  • Go基础——Map

    map声明语法为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的v...

  • Go语言高并发Map解决方案

    Go语言高并发Map解决方案 Go语言基础库中的map不是并发安全的,不过基于读写锁可以实现线程安全;不过在Go1...

  • 第03天(复合类型)_map的基本使用

    24_map的基本使用.go 25_map赋值.go 26_map遍历.go 27_map删除.go 28_map...

  • go编程基础-map

    map1.类似于其他语言中的哈希表或者字典,以key-value的形式存储数据;2.key必须是支持==或!=比较...

  • go基础——map/sync.Map

    注:权作为学习笔记,基于version: 1.14 内容 一 map1.1 数据结构1.2 写入1.3 查找1.4...

  • Map

    常见操作:http://www.runoob.com/go/go-map.html 创建Map 赋值 遍历Map ...

  • Go语言——Map分析

    Go语言——Map分析 go\src\runtime\hashmap.go 简介 map就是一个hash表。数据被...

  • Go语言探索 - 11(原创)

    Go语言基础系列博客用到的所有示例代码 上一篇文章主要学习了Go语言的切片以及Map。本篇文章主要学习的是Go语言...

  • Go 语言基础--map 浅析

    map通常是一种无序键值对的集合,map存在的意义主要是利用map的结构根据key来快速检索数据,在go中也是这样...

网友评论

      本文标题:Go基础——Map

      本文链接:https://www.haomeiwen.com/subject/vljvnxtx.html