文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

GO 中将 Map 转换为 List 的通用函数

2024-02-13 20:26

关注

php小编草莓为您介绍一款名为“GO 中将 Map 转换为 List 的通用函数”的实用工具。这个函数可以帮助您将键值对映射(Map)的数据结构转换为列表(List)的数据结构。通过这个通用函数,您可以方便地将复杂的数据结构转换为更简洁的形式,提高代码的可读性和可维护性。无论您是在开发中遇到了类似的需求,还是想了解更多关于数据结构转换的技巧,这个通用函数都将给您带来便利和启发。让我们一起来探索这个实用工具吧!

问题内容

如何在 go 中编写一个函数,将任何 map 转换为对象列表(删除键)?

例如:

func maptolist(inputmap map[any]any) any {
    var resultlist []any 
    for _, obj := range inputmap {
        resultlist = append(resultlist, obj)
    }
    return resultlist
}

func main() {
    mymap := make(map[string]string)
    mymap["a"] = "1"
    mymap["b"] = "12"
    l := maptolist(mymap).([]string)
    fmt.printf("(%v, %t)\n", l, l)
}

将输出:([1 12], []string)

但我总是遇到类型问题并且没有找到解决方法。使用类型断言或转换我遇到了类似的问题。

cannot use myMap (variable of type map[string]string) as map[any]any value in argument to mapToList

我应该如何编写maptolist()函数?

它必须作为输入 inputmap map[any]anyinputmap any 因为我想传递任何类型的地图(map[string]customstruct; map[int][]customstruct 等)

更新:我在第一次编写该函数时添加了该函数以及有关输入的更多详细信息

解决方法

请参阅本关于泛型的教程或语言规范

any不是变量类型,它是一个type约束,可以使用的类型的描述。您需要使用约束 any 定义类型参数,然后从参数签名中引用泛型类型。

//                                 | from this point on, k and v are
//                                 | now valid types to use in the function
func maptoslice[k comparable, v any](m map[k]v) []v {
    s := make([]v, 0, len(m))
    for _, v := range m {
        s = append(s, v)
    }
    return s
}

参数m必须是map[k]v,其中kcomparable类型,vany类型。返回类型 []v 将是与输入映射中的值具有相同类型的切片。

请注意,any 不能用作映射键的约束,因为并非所有类型都可以用作键,只有 可比较的 类型。

然后,要调用该方法,请传入满足约束的类型(例如 map[string][]string),可以选择显式显示类型参数。

m := map[string][]string{
    "a": {"b", "c"},
    "d": {"e", "f"},
}
s := maptoslice(m)
// or
t := maptoslice[string, []string](m)
// [[b c] [e f]]

通过明确类型,您可以自行记录代码并捕获任何意外的类型问题。例如,以下代码将返回错误:

v := mapToSlice[string, []int](m)
...
./main.go:14:33: cannot use m (variable of type map[string][]string) as map[string][]int value in argument to mapToSlice[string, []int]

以上就是GO 中将 Map 转换为 List 的通用函数的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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