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 开发人员来说,理解映射作为集合的使用对于解决问题和高效资源利用至关重要。
以上是为什么 Golang 没有原生的 Set 数据结构?的详细内容。更多信息请关注PHP中文网其他相关文章!