【原创】go语言学习(十)Map类型
目录
- 声明和初始化
- 基本操作
- 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)
}
}
基本操作
1、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)
}
2、声明时进⾏行行初始化
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])
}
6、 通过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])
}
7、如何判断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")
}
}
8、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)
}
}
9、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)
}
10、map的长度
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
fmt.Println("length is", len(a))
}
11、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)
}
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])
}
}
map排序
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
var a map[string]int = make(map[string]int, 1024)
for i := 0; i < 128; i++ {
key := fmt.Sprintf("stu%d", i)
value := rand.Intn(1000)
a[key] = value
}
var keys []string = make([]string, 0, 128)
for key, value := range a {
fmt.Printf("map[%s]=%d\n", key, value)
keys = append(keys, key)
}
sort.Strings(keys)
for _, value := range keys {
fmt.Printf("key:%s val:%d\n", value, a[value])
}
}
map类型的切片
package main
import (
"fmt"
"math/rand"
"time"
)
func sliceMap(){
rand.Seed(time.Now().UnixNano())
var s[]map[string] int
s = make([]map[string]int, 5, 16)
for index,val := range s {
fmt.Printf("slice[%d]=%v\n", index, val)
}
fmt.Println()
s[0] = make(map[string]int, 16)
s[0]["stu01"] = 1000
s[0]["stu02"] = 1000
s[0]["stu03"] = 1000
for index, val := range s {
fmt.Printf("slice[%d]=%v\n", index, val)
}
}
func mapSlice() {
rand.Seed(time.Now().UnixNano())
var s map[string][]int
s = make(map[string[]int, 16)
key := "stu01"
value, ok := s[key]
if !ok {
s[key] = make([]int, 0, 16)
value = s[key]
}
value = append(value, 100)
value = append(value, 200)
value = append(value, 300)
s[key] = value
fmt.Printf("map:%v\n", s)
}
func main(){
//sliceMap()
}

浙公网安备 33010602011771号