首页 > 文章列表 > 利用泛型参数从映射返回最上层键名

利用泛型参数从映射返回最上层键名

484 2024-02-08
问题内容

我有以下方法,它返回 map 中的所有键。但它接受的参数必须是 map[string]string 类型。

func GetAllKeys(m map[string]string) []string {
    keys := make([]string, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }

    return keys
}

如果我有一个 map 但类型为 map[string]map[string]string,我如何重用此方法。有没有办法概括这个方法,因为它所要做的就是从映射中返回顶级键。


正确答案


使用 go 1.18+,您可以使用 类型参数

func GetAllKeys[K comparable, V any](m map[K]V) []K {
    keys := make([]K, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}

https://go.dev/play/p/jv2enkjzmzu