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 开发人员来说,理解地图作为集合的使用对于解决问题和高效资源利用至关重要。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3