文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从任何值类型的字典中获取字符串键的切片

2024-04-05 00:03

关注

学习Golang要努力,但是不要急!今天的这篇文章《从任何值类型的字典中获取字符串键的切片》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我想编写一个函数来从映射中获取所有键作为字符串切片,其中键类型是字符串,值可以是任何其他类型。

像这样,但可以有任何类型的地图[字符串]...作为输入。

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
}

实际上我想在javascript中实现object.keys()

我尝试使用 map[string]interface{} 作为函数的参数类型,但它不能只将任何特定映射传递给该函数,这在 golang 中可能吗?


解决方案


您可以使用 reflect 包中的 mapkeys 来执行此操作(参考:https://golang.org/pkg/reflect/#Value.MapKeys)。

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

下面给出了一个例子(演示链接:https://play.golang.org/p/xhDtmbGUyz0):

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
    }
}

终于介绍完啦!小伙伴们,这篇关于《从任何值类型的字典中获取字符串键的切片》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯