使用通用类型参数 [duplicate] 从 map 返回顶级键

Return top level keys from map with a generalised type argument [duplicate]

提问人:Suhail Gupta 提问时间:3/5/2023 更新时间:3/5/2023 访问量:34

问:

我有以下方法,它从 .但是它接受的参数必须是 类型的 。mapmap[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
}

如果我有一个 but 和一个类型,我怎么能重用这个方法。有没有办法推广这个方法,因为它所要做的就是从地图中返回顶级键。mapmap[string]map[string]string

字典 Go 类型 切片

评论

0赞 Elias Van Ootegem 3/5/2023
请注意,迭代地图是不确定的。如果您得到一块钥匙,则该切片不会每次都相同。为了回应一篇关于代码审查的帖子,我迅速整理了一个可以安全并发使用并允许确定性迭代的通用映射类型,并决定把它放在 GitHub 上,随意看看

答:

0赞 mkopriva 3/5/2023 #1

使用 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

评论

0赞 Suhail Gupta 3/5/2023
如果你能解释一下,会更有帮助[K comparable, V any](m map[K]V) []K
1赞 mkopriva 3/5/2023
[K comparable, V any]类型参数,我已经更新了答案,其中包含指向相关规范部分的链接。