golang 中的 map[T]struct{} 和 map[T]bool

有什么不同?是map[T]bool优化map[T]struct{}?Go 的最佳实践是什么?

也许使用的最佳理由map[T]struct{}是您不必回答“如果值为false” ,这意味着什么?


哔哔one
浏览 475回答 3
3回答

largeQ

来自“Go 编程语言”:没有字段的结构类型称为空结构,书面形式 struct{}。它的大小为零并且不携带任何信息,但仍然可能有用。一些 Go 程序员使用它而不是 bool 作为表示集合的映射的值类型,强调只有键是有意义的,但节省空间是微不足道的,语法也比较麻烦,所以我们通常避免使用它。如果您使用bool“集合”中的存在测试会稍微好一些,因为您可以说:if mySet["something"] {    /* .. */}

冉冉说

区别在于内存要求。bonnet 下的 empty struct 不是指针,而是一个特殊的值来节省内存。

绝地无双

空结构与其他结构类型一样。您习惯于使用普通结构的所有属性同样适用于空结构。您可以声明一个structs{}s数组,但它们当然不消耗存储空间。var x [100]struct{}fmt.Println(unsafe.Sizeof(x)) // prints 0如果空结构不包含数据,则无法确定两个struct{}值是否不同。考虑到上述陈述,这意味着我们可以将它们用作方法接收器。type S struct{}func (s *S) addr() { fmt.Printf("%p\n", s) }func main() {        var a, b S        a.addr() // 0x1beeb0        b.addr() // 0x1beeb0}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go