MST

星途 面试题库

面试题:Go语言中批量删除Map元素的优化方法

假设有一个map[string]int类型的映射变量m,里面有大量元素,现在要删除一批已知键(存储在一个string类型的切片keys中)对应的元素,怎样实现才能提高效率?请说明思路并给出代码示例。
29.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

思路

为了提高删除效率,避免在每次删除时进行线性查找,可以先将 keys 切片转换为 map,这样在判断某个键是否需要删除时时间复杂度从 O(n) 降低到 O(1)。然后遍历原 map[string]int,如果键不在需要删除的 map 中,则将其添加到一个新的 map 中,最后将新 map 赋值给原 map

代码示例

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
        "d": 4,
        "e": 5,
    }
    keys := []string{"b", "d"}

    keySet := make(map[string]bool)
    for _, key := range keys {
        keySet[key] = true
    }

    newM := make(map[string]int)
    for key, value := range m {
        if _, exists := keySet[key];!exists {
            newM[key] = value
        }
    }

    m = newM
    fmt.Println(m)
}