Go:map声明和定义

map声明和定义

1. map类型是⼀个key-value的数据结构。

//var a map[key的类型]value类型
var a map[string]int
var b map[int]string
var c map[float32]string

注意:map必须初始化才能使⽤,否则panic

2. map类型的变量默认初始化为nil,需要使⽤make分配map内存

package main
import (
     "fmt"
)
func main() {
     var a map[string]int
     if a == nil {
         fmt.Println("map is nil. Going to make one.")
         A = make(map[string]int)
     }
}

3. map插⼊操作

package main
import (
 "fmt"
)
func main() {
     a := make(map[string]int)
     a["steve"] = 12000
     a["jamie"] = 15000
     a["mike"] = 9000
     fmt.Println(“a map contents:", a)
}

4. 声明时进⾏初始化

package main
import (
     "fmt"
)
func main() {
     a := map[string]int {
     "steve": 12000,
     "jamie": 15000,
     }
     a[“mike"] = 9000
     fmt.Println(“a map contents:", a)
}

5. 通过key访问map中的元素

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

5. 通过key访问map中的元素

package main
import (
     "fmt"
)
func main() {
     a := map[string]int{
         "steve": 12000,
         "jamie": 15000,
     }
     a["mike"] = 9000
     b := “123”
     fmt.Println("Salary of", b, "is", a[b])
}

6. 如何判断map指定的key是否存在? value, ok := map[key]

package main
import (
     "fmt"
)

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

7. map遍历操作

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

8. map删除元素

package main
import (
     "fmt"
)
func main() {
     a := map[string]int{
         "steve": 12000,
         "jamie": 15000,
     }
     a["mike"] = 9000
     fmt.Println("map before deletion", a)
     delete(a, "steve")
     fmt.Println("map after deletion", a)
}

9. map的⻓度

package main
import (
     "fmt"
)
func main() {
     a := map[string]int{
         "steve": 12000,
         "jamie": 15000,
     }
     a["mike"] = 9000
     fmt.Println("length is", len(a))
}

10.map是引⽤类型

package main
import (
     "fmt"
)
func main() {
     a := map[string]int{
         "steve": 12000,
         "jamie": 15000,
     }
     a["mike"] = 9000
     fmt.Println(“origin map", a)
     b := a
     b["mike"] = 18000
     fmt.Println(“a map changed", a)
}

11.默认情况下,map并不是按照key有序进⾏遍历的

package main
import (
    "fmt"
)
func main() {
    var a map[string]int = make(map[string]int, 10)
    for i := 0; i < 10; i++ {
        key := fmt.Sprintf("key%d", i)
        a[key] = i
    }
    for key, value := range a {
        fmt.Printf("key:%s = %d\n", key, value)
    }
}

12. map按照key进⾏排序,遍历

package main
import (
     "fmt"
     "sort"
)
func main() {
     var a map[string]int = make(map[string]int, 10)
     for i := 0; i < 10; i++ {
         key := fmt.Sprintf("key%d", i)
         a[key] = i
     }
     var keys []string
     for key, _ := range a {
         keys = append(keys, key)
     }
     sort.Strings(keys)
     for _, key := range keys {
     fmt.Printf("key:%s=%d\n", key, a[key])
 }
}

13. map类型的切⽚

package main
import (
    "fmt"
)
func main() {
    var mapSlice []map[string]int
    mapSlice = make([]map[string]int, 5)
    fmt.Println("before map init")
    for index, value := range mapSlice {
        fmt.Printf("index:%d value:%v\n", index, value)
    }
    fmt.Println()
    mapSlice[0] = make(map[string]int, 10)
    mapSlice[0]["a"] = 1000
    mapSlice[0]["b"] = 2000
    mapSlice[0]["c"] = 3000
    mapSlice[0]["d"] = 4000
    mapSlice[0]["e"] = 5000

    fmt.Println("after map init")
    for index, value := range mapSlice {
        fmt.Printf("index:%d value:%v\n", index, value)
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值