Go delete map


Go 提供的内置函数 delete,这个函数可以用来从字典中删除元素。

package main

import (
    "fmt"
)

func main() {
    x := make(map[string]int)

    x["A"] = 10
    x["B"] = 20
    x["C"] = 30
    x["D"] = 40

    fmt.Println("Before Delete")
    fmt.Println("Length:", len(x))
    fmt.Println(x)

    delete(x, "A")

    fmt.Println("After Delete")
    fmt.Println("Length:", len(x))
    fmt.Println(x)
}

输出结果为

Before Delete
Length: 4
map[A:10 B:20 C:30 D:40]
After Delete
Length: 3
map[B:20 C:30 D:40]

我们在删除元素前查看一下字典长度和元素,删除之后再看一下。这里面我们还可以看到 len 函数也可以用来获取字典的元素个数。当然如果你试图删除一个不存在的键,那么程序也不会报错,只是不会对字典造成任何影响。

清空 map。

import (
    "fmt"
    "time"
)

func main() {
    testMap := make(map[string]string)
    testMap["k"] = "v"
    fmt.Println(testMap)
    time.Sleep(time.Second * 2)
    for key, value := range testMap {
        fmt.Println(value)
        delete(testMap, key)
    }
    fmt.Println(testMap)
}

原理

func mapdelete(t *maptype, h *hmap, key unsafe.Pointer) {
    for ; b != nil; b = b.overflow(t) {
        for i := uintptr(0); i < bucketCnt; i++ {
            b.tophash[i] = empty
            h.count--
        }
    }
}
分享:

评论