为了账号安全,请及时绑定邮箱和手机立即绑定

编写一个函数以从映射中获取字符串键的切片,无论映射是什么值类型

编写一个函数以从映射中获取字符串键的切片,无论映射是什么值类型

Go
白衣非少年 2023-07-10 09:25:32
我想编写一个函数来从映射中获取所有键作为字符串切片,其中键类型是字符串,值可以是任何其他类型。像这样,但可以有任何类型的 map[string]... 作为输入。func mapLowCaseKeys(v map[string]string) []string {    keys := make([]string, len(v))    i := 0    for key := range v {        keys[i] = strings.ToLower(key)        i++    }    return keys}其实我想Object.keys()用Javascript实现。我尝试过用作map[string]interface{}函数的参数类型,但它不能只将任何特定的映射传递给该函数,这在 golang 中可能吗?
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

MapKeys您可以在包中使用reflect来做到这一点

MapKeys 返回一个切片,其中包含映射中存在的所有键(按未指定的顺序)。如果 v 的 Kind 不是 Map,它会发生恐慌。如果 v 表示 nil 映射,则它返回一个空切片。

下面给出了一个示例

package main


import (

    "fmt"

    "reflect"

)


func main() {

    fmt.Println(mapLowCaseKeys(map[string]float64{

        "key1" : 1.2,

    }))


    fmt.Println(mapLowCaseKeys(map[string]interface{} {

        "key1" : 1.2,

        "key2" : map[string]string{"kk": "3"},

    }))


    fmt.Println(mapLowCaseKeys(map[int]float64{

         11 : 1.2,

    }))


    fmt.Println(mapLowCaseKeys(nil))

}


func mapLowCaseKeys(v interface{}) []string {

    keys := []string{}

    value := reflect.ValueOf(v)

    if value.Kind() == reflect.Map {

        for _, v := range value.MapKeys() {

            if v.Kind() == reflect.String {

                keys = append(keys, v.String())

            }

        }

        return keys

    } else {

        fmt.Println("it is not a map!!")

        return keys

    }

}


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信