”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么 Golang 没有原生的 Set 数据结构?

为什么 Golang 没有原生的 Set 数据结构?

发布于2024-11-15
浏览:899

Why Doesn't Golang Have a Native Set Data Structure?

Golang 奇怪地缺乏集合数据结构

在 Golang 中,对集合数据结构的基本需求导致了一个令人困惑的问题:为什么不是原生提供的吗?从 Google 颇具影响力的 Guava 库中汲取灵感,为什么 Golang 的设计者省略了对这样一个基本结构的支持,迫使开发人员自己设计实现?

答案在于使用映射构建集合的简单性。如提供的代码片段中所示,可以利用地图来创建集。可以轻松实现检查是否存在、添加、删除以及执行集合操作(​​并集、交集)等关键操作。

s := map[int]bool{5: true, 2: true}
_, ok := s[6] // check for existence
s[8] = true // add element 
delete(s, 2) // remove element

// Union
s_union := map[int]bool{}
for k, _ := range s1{
    s_union[k] = true
}
for k, _ := range s2{
    s_union[k] = true
}

// Intersection
s_intersection := map[int]bool{}
if len(s1) > len(s2) {
  s1, s2 = s2, s1 // better to iterate over a shorter set
}
for k,_ := range s1 { 
  if s2[k] {
    s_intersection[k] = true
  }
}

虽然这些基于映射的实现足以满足大多数实际场景,但有些人可能会认为本机集实现将简化并增强代码可读性。尽管如此,对于 Golang 开发人员来说,理解地图作为集合的使用对于解决问题和高效资源利用至关重要。

最新教程 更多>
  • Cypress 的互联网:Heroku 的“互联网”游乐场的真实场景
    Cypress 的互联网:Heroku 的“互联网”游乐场的真实场景
    我最近去了 chatGPT 并询问有哪些好的自动化练习,在同一系统上工作一段时间后,或者只为特定类型的用户流提供自动化,我们最终可能会忘记一些事情,所以我询问了一些练习网站,然后我找到了互联网。 尽管该网站可能看起来很简陋,但它们仍然为您提供了一个尝试自动化的地方,而目前,这就是我所需要的。我花了...
    编程 发布于2024-11-15
  • 如何追踪 Go 堆转储到其源变量?
    如何追踪 Go 堆转储到其源变量?
    如何理解堆转储表示?你在理解 Go 中堆转储的表示时遇到了困难。虽然您已经浏览了 GitHub 上的可用信息,但它并未提供所需的清晰度。您寻求一种方法来将堆转储追溯到 Go 代码中保存对象根地址的特定变量。这将使您能够释放引用并允许垃圾收集器声明该对象。当前限制:重要的是要承认,目前还没有完整的解决...
    编程 发布于2024-11-15
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-15
  • 如何简化 Go 中的 CSV 读写以提高性能?
    如何简化 Go 中的 CSV 读写以提高性能?
    Go中高效的CSV读写在提供的Go代码中,CSV读写过程导致了严重的性能问题。为了解决这个问题,让我们探索一种简化这些操作的替代方法。高效读取 CSV我们不是将整个 CSV 文件加载到内存中然后进行处理,而是可以利用 csv.Reader 一次处理一行的能力。这显着减少了内存使用并提高了性能。以下代...
    编程 发布于2024-11-15
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-15
  • 为什么内嵌块显示在 Internet Explorer 8 中不起作用?
    为什么内嵌块显示在 Internet Explorer 8 中不起作用?
    Internet Explorer 8 中的持续内联块问题尽管文档表明支持内联块,但它可能无法在 Internet Explorer 8 中正确呈现。此问题经常出现尝试水平对齐元素时会出现此问题。要解决此问题,请考虑以下事项:设置正确的 Doctype使用以下 doctype 声明开始 HTML 文...
    编程 发布于2024-11-15
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-15
  • 以下是几个符合文章内容的标题:

1. How to Create Visually Distinct Colors: A Guide to the Best Methods and Resources.  (This highlights the problem and the solution-oriented nature of the article.)

2. What are the
    以下是几个符合文章内容的标题: 1. How to Create Visually Distinct Colors: A Guide to the Best Methods and Resources. (This highlights the problem and the solution-oriented nature of the article.) 2. What are the
    创建视觉上不同的颜色这个问题已在各种 StackOverflow 讨论中得到解决,但普遍最佳的解决方案仍然难以捉摸。然而,颜色理论和算法的进步提供了几种有前途的方法。任意数量的颜色 (N)分类图像的颜色显示:提供一种生成感知上不同颜色的方法,可免费下载。A个性化地图着色的网络服务:将为个性化地图着色...
    编程 发布于2024-11-15
  • ## 可选链是消除链式“Get”调用中 NullPointerException 的关键吗?
    ## 可选链是消除链式“Get”调用中 NullPointerException 的关键吗?
    安全地导航容易出现空值的“Get”调用链在复杂的代码库中,链接多个“get”调用可能成为滋生地对于空指针异常。为了防止潜在的 null 值,开发人员经常对每个中间对象进行详细的 null 检查。但是有没有更优雅、更有效的方法来处理这种情况?可选链通过Java 8的Optional类,我们有一个优雅的...
    编程 发布于2024-11-15
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1和$array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求是构...
    编程 发布于2024-11-15
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-15
  • 我可以从 JavaScript 单击事件调用 ASP.NET 方法吗?
    我可以从 JavaScript 单击事件调用 ASP.NET 方法吗?
    我可以从 JavaScript 中利用 ASP.NET 功能吗?寻求使用 JavaScript 增强 ASP.NET 项目的有抱负的 Web 开发人员可能会遇到一个常见问题:从 JavaScript 的单击事件访问自定义 ASP.NET 方法是否可行?答案在于 ASP.NET 的回发机制的复杂性。在...
    编程 发布于2024-11-15
  • 如何在 Go 中实现“do while”循环?
    如何在 Go 中实现“do while”循环?
    Go 相当于 Java 的“do while”循环在 Java 中,“do while”循环允许一段代码在以下位置执行在检查退出条件之前至少一次。 Go 没有显式的“do while”循环,但可以使用 for 循环并将布尔循环变量设置为 true 来复制它。更正的代码:要解决代码中的无限循环问题,您...
    编程 发布于2024-11-15
  • 新型类中的方法解析顺序 (MRO) 与旧式类有何不同并解决继承冲突?
    新型类中的方法解析顺序 (MRO) 与旧式类有何不同并解决继承冲突?
    新型类中的方法解析顺序(MRO)澄清新型类中的 MRO与旧的不同样式类、新样式类内省其基类以建立方法解析顺序 (MRO)。此顺序决定了在对象上调用方法时搜索方法的顺序。解决与 MRO 的继承冲突new- 中 MRO 之间的关键区别当同一个祖先类在继承层次结构中多次出现时,就会出现样式类和旧样式类。例...
    编程 发布于2024-11-15
  • 异常与错误:有什么区别以及为什么很重要?
    异常与错误:有什么区别以及为什么很重要?
    理解异常和错误之间的区别:一个重要的区别Java 广泛的错误处理系统包含两个主要类别:异常和错误。区分这些类别对于软件开发中的有效异常处理至关重要。错误:严重且不可恢复错误代表严重的系统级问题,表明系统出现根本性故障。应用程序的功能。它们通常是由外部因素或不可恢复的内部错误引起的,导致无法继续正常执...
    编程 发布于2024-11-15

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3