通常,集合和映射数据结构比在普通数组或切片中存储值列表需要更多的内存,因为集合和映射有效地提供了附加功能,例如唯一性或通过键检索值。
如果您想要最小的内存使用量,只需将它们存储在一个切片中,例如[]Stuff. 如果您在多个位置使用这些值,那么仅存储它们的指针也可能是有利可图的,例如[]*Stuff,因此存储相同Stuff值的每个位置都可以存储相同的指针(而不重复该值)。
如果你只想存储唯一的结构体值,那么集合确实是最方便的选择,在 Go 中用map.
没有什么问题map[Stuff]struct{},它有效。地图键类型要求:
比较运算符== 和! = 必须为键类型的操作数完全定义;因此键类型不能是函数、映射或切片。
Stuff是一个结构体,并且Go 中的结构体在以下情况下是可比较的:
如果结构体的所有字段都可比较,则结构体值也可比较。如果两个结构体值对应的非空白字段相等,则它们相等。
如果您的Stuff结构是您发布的结构,那么它是可比较的:它只包含可比较类型的字段string。
另请注意,如果您想要一个集合数据结构,如果您使用boolas 值类型(例如map[Stuff]bool)和true值,那么您可以简单地使用索引来测试值是否在映射中,因为索引表达式会产生如果键(在您的情况下)不在映射中,则值类型( falsefor )的零值,正确地告诉您要查找的值不在“集合”中。(如果它在映射中,则其关联值是索引表达式的结果 - 正确地告诉它在映射中)。boolStufftrue
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |