go语言的学习------Map

Map

var map1 map[keytype]valuetype

key可以是任意可以用==或者!=
所以数组,切片,结构体不能作为key(含有数组切片的结构体不能作为key,只包含内建类型的struct是可以作为key的)。
value 可以是任意类型的 (连函数都可以做为value,存入的是函数代码的地址)
如果需要一对多时,可以将数组作为value,就很好的解决了这个问题
在通过key获取value时,如果key不存在,则会返回对应值类型的空值

  • val, ok := map1[key] 测试键值队是否存在。 存在ok返回为true
  • delete(map1,key1) 删除map1中的key1
  • for key,value := range map1 {…} 用来循环map
Map类型的切片
  • 如果想要获取一个map类型的切片,我们必须使用俩次make()函数,第一次分配切片,第二次分配切片中每个map元素
package main
import "fmt"

func main() {
    // Version A:
    items := make([]map[int]int, 5)
    for i:= range items {
        items[i] = make(map[int]int, 1)
        items[i][1] = 2
    }
    fmt.Printf("Version A: Value of items: %v\n", items)

    // Version B: NOT GOOD!
    items2 := make([]map[int]int, 5)
    for _, item := range items2 {
        item = make(map[int]int, 1) // item is only a copy of the slice element.
        item[1] = 2 // This 'item' will be lost on the next iteration.
    }
    fmt.Printf("Version B: Value of items: %v\n", items2)
}
map的排序
  • map默认是无序的,如果想要给map排序,可以将key拷贝到一个切片,再对切片进行排序。
// the telephone alphabet:
package main
import (
    "fmt"
    "sort"
)

var (
    barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
                            "delta": 87, "echo": 56, "foxtrot": 12,
                            "golf": 34, "hotel": 16, "indio": 87,
                            "juliet": 65, "kili": 43, "lima": 98}
)

func main() {
    fmt.Println("unsorted:")
    for k, v := range barVal {
        fmt.Printf("Key: %v, Value: %v / ", k, v)
    }
    keys := make([]string, len(barVal))
    i := 0
    for k, _ := range barVal {
        keys[i] = k
        i++
    }
    sort.Strings(keys)
    fmt.Println()
    fmt.Println("sorted:")
    for _, k := range keys {
        fmt.Printf("Key: %v, Value: %v / ", k, barVal[k])
    }
}
将map的键值对调
  • 新建一个map[value]key ,然后循环增加到新的map里面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值