iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >检查不同 Go Map 类型中的重复键
  • 524
分享到

检查不同 Go Map 类型中的重复键

2024-02-06 10:02:04 524人浏览 安东尼
摘要

问题内容 我想要一个功能来检查不同地图中的重复键。 这就是我所拥有的 ma := map[string]typea mb := map[string]typeb mc := map[s

问题内容

我想要一个功能来检查不同地图中的重复键。

这就是我所拥有的

ma := map[string]typea
mb := map[string]typeb
mc := map[string]typec

dup := map[string]bool{}
    for k := range ma{
        if !dup[k] {
            dup[k] = true
        } else {
            return fmt.errorf("duplicate key[%v]", k)
        }
    }
    for k := range mb{
        if !dup[k] {
            dup[k] = true
        } else {
            return fmt.errorf("duplicate key[%v]", k)
        }
    }
    for k := range mc {
        if !dup[k] {
            dup[k] = true
        } else {
            return fmt.errorf("duplicate key[%v]", k)
        }
    }
    return nil

我想重构它并编写一个函数

func checkDupKeys[M ~map[K]V, K comparable, V any](maps ...M) error {
    dup := map[K]bool{}
    for _, m := range maps {
        for k := range m {
            if !dup[k] {
                dup[k] = true
            } else {
                return fmt.Errorf("duplicate key[%v]", k)
            }
        }
    }
    return nil
}

但它只能接受相同类型的映射,不能接受 typea、typeb 和 typec。


正确答案


您可以尝试使用 any 类型和反射

func checkDupKeys(maps ...any) error {
    dup := map[any]bool{}
    for i, m := range maps {
        t := reflect.TypeOf(m)
        if t.Kind() != reflect.Map {
            return fmt.Errorf("not a map at index: %d", i)
        }
        keys := reflect.ValueOf(m).MapKeys()
        for _, k := range keys {
            v := k.Interface()
            if !dup[v] {
                dup[v] = true
            } else {
                return fmt.Errorf("duplicate key[%v]", v)
            }
        }
    }
    return nil
}

这种方法的缺点是该函数还将接受非映射参数,并且编译器不会对此发出警告。

以上就是检查不同 Go Map 类型中的重复键的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 检查不同 Go Map 类型中的重复键

本文链接: https://www.lsjlt.com/news/561403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 检查不同 Go Map 类型中的重复键
    问题内容 我想要一个功能来检查不同地图中的重复键。 这就是我所拥有的 ma := map[string]typea mb := map[string]typeb mc := map[s...
    99+
    2024-02-06
  • Go的边界检查有哪些类型
    本篇内容主要讲解“Go的边界检查有哪些类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go的边界检查有哪些类型”吧!1. 什么是边界检查边界检查,英文名 Bounds Check Elimin...
    99+
    2023-06-15
  • 使用自定义类型作为键的Go语言map
    标题:使用自定义类型作为键的Go语言map示例 在Go语言中,可以使用自定义类型作为map的键,这为我们提供了更灵活的数据存储方式。通过定义自定义类型,可以实现更复杂的键值关系,以满足...
    99+
    2024-04-02
  • 不同语言中类型系统与Go语言类型系统的差异
    不同编程语言的类型系统差异很大。go 语言采用静态、强类型且结构化的类型系统,提供基本类型、复合类型和接口类型,确保类型安全、增强代码可读性和维护性。 不同语言中类型系统与 Go 语言...
    99+
    2024-04-11
    go 类型系统 python go语言 代码可读性
  • 不同语言中类型转换与Go语言类型转换的差异
    go 语言类型转换与其他语言存在差异:go 语言强制类型安全,其他语言允许隐式转换;go 语言内置转换不导致数据丢失,而其他语言的强制转换可能导致;go 语言使用 t(v) 语法进行显式...
    99+
    2024-04-12
    go 类型转换 python go语言 c++ 数据丢失 隐式转换
  • java中怎么检查变量的类型
    在Java中,可以使用instanceof关键字来检查变量的类型。语法如下:javavariable instanceof Type...
    99+
    2023-10-18
    java
  • Python中的函数参数类型检查
    目录Python函数参数类型检查下面我们用装饰器来实现总结Python函数参数类型检查 有一个很经典的笑话: 三个月之前,只有我和上帝知道这代码是干什么的。 现在,只有上帝知道了。 ...
    99+
    2022-12-19
    Python函数 函数参数类型检查 Python函数参数
  • Golang内置函数“make”如何实现不同类型的参数长度检查?
    大家好,今天本人给大家带来文章《Golang内置函数“make”如何实现不同类型的参数长度检查?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正...
    99+
    2024-04-05
  • Java中为什么不同的返回类型不算方法重载
    目录为什么不同返回类型不算方法重载?方法重载的使用场景方法重载匹配原则匹配原则1:精准类型匹配匹配原则2:基本类型自动转换成更大的基本类型匹配原则3:自动装/拆箱匹配匹配原则4:按照...
    99+
    2022-11-15
    Java返回类型 Java方法重载
  • 如何在Go编程中使用不同类型的数据?
    Go是一种高效、简洁的编程语言,可以用于开发各种类型的应用程序。在Go编程中,了解如何使用不同类型的数据是非常重要的,因为这可以帮助您更好地管理数据并提高程序的性能。在本文中,我们将介绍如何在Go编程中使用不同类型的数据,并附带演示代码。 ...
    99+
    2023-08-09
    编程算法 数据类型 开发技术
  • GO语言中的数据类型和JavaScript有什么不同?
    随着计算机技术的不断发展,越来越多的编程语言出现在我们的视野中。其中,GO语言和JavaScript都是非常受欢迎的编程语言之一。虽然二者都是面向对象的语言,但是在数据类型方面,GO语言和JavaScript还是存在一些不同的地方。 一、...
    99+
    2023-11-12
    数据类型 存储 javascript
  • 如何在不进行类型检查的情况下获取泛型函数中类型的大小?
    积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何在不进行类型检查的情况下获取泛...
    99+
    2024-04-05
  • 深入了解Go语言不同的数据类型
    了解Go语言中不同的数据类型,需要具体代码示例 Go语言作为一种静态类型的编程语言,拥有丰富的数据类型,包括基本数据类型和复合数据类型。掌握不同数据类型的特点和使用方法,对于编写高效、准确的程序至关重要。下面...
    99+
    2024-01-13
  • Go语言中如何响应不同类型的路径数据?
    在Web应用程序中,路由是一个非常重要的概念,因为它允许我们将不同的请求分配到不同的处理程序中。在Go语言中,我们可以使用标准库中的net/http包来构建Web应用程序。在本文中,我们将探讨如何使用net/http包来响应不同类型的路径...
    99+
    2023-09-25
    响应 path 数据类型
  • GO 中的打包框架:如何处理不同的数据类型?
    在 GO 语言中,打包框架是一个非常重要的概念。它可以将不同类型的数据打包成一个二进制流,以便在网络上传输或存储到磁盘中。GO 语言中的打包框架非常强大,可以处理不同的数据类型,包括基本数据类型、结构体、数组、切片和映射等。 在 GO 语...
    99+
    2023-11-01
    打包 框架 数据类型
  • 探究PHP中不同类型的数组
    PHP是一种广泛应用于网站开发的服务器脚本语言,其灵活的数组功能使得处理数据变得更加高效和便捷。在PHP中,数组是一种复合数据类型,用来存储多个值。根据数据结构和用途的不同,PHP中的...
    99+
    2024-03-13
    php数组操作 php数组类型 数组变量php
  • 如何在Go语言中正确使用不同的数据类型?
    Go语言是一门静态类型语言,所以在使用不同的数据类型时需要特别注意。本篇文章将介绍如何在Go语言中正确地使用不同的数据类型,以及如何避免常见的数据类型错误。 一、基本数据类型 Go语言中的基本数据类型包括整型、浮点型、布尔型和字符串类型。以...
    99+
    2023-08-18
    数据类型 面试 git
  • 如何在Go语言中处理不同类型的路径数据?
    在Go语言中,处理不同类型的路径数据是非常常见的需求。无论是在web应用中还是在系统应用中,都需要处理不同类型的路径数据。本文将介绍如何在Go语言中处理不同类型的路径数据。 一、处理文件路径 在Go语言中,可以使用path包和filepat...
    99+
    2023-09-25
    响应 path 数据类型
  • 如何在Go中使用API来处理不同的数据类型?
    Go语言是一种现代化的编程语言,它被广泛应用于云计算、网络编程、大数据等领域。在Go中,API是一种非常重要的概念,它可以帮助我们处理不同的数据类型。本文将介绍如何在Go中使用API来处理不同的数据类型,并提供相关演示代码。 一、什么是AP...
    99+
    2023-06-03
    api 数据类型 教程
  • 解析Go语言泛型对不同数据类型的适配性
    go 语言泛型允许开发者使用类型参数定义通用函数和类型,从而提高代码适应不同数据类型的能力。具体来说,它提供了以下好处:类型安全:类型约束确保泛型代码中的类型兼容。代码可重用性:泛型函数...
    99+
    2024-04-03
    泛型 类型适配 go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作