1 回答
TA贡献1797条经验 获得超4个赞
通常 set 和 map 数据结构需要比在普通数组或切片中存储值列表更多的内存,因为 set 和 map 提供了有效的附加功能,如唯一性或通过键检索值。
如果您想要最少的内存使用量,只需将它们存储在一个切片中,例如[]Stuff
. 如果您在多个位置使用这些值,那么仅存储它们的指针也可能是有利可图的,例如[]*Stuff
,因此每个存储相同Stuff
值的位置都可以存储相同的指针(无需复制该值)。
如果您只想存储唯一的结构值,那么集合确实是最方便的选择,在 Go 中使用map
.
没有任何问题map[Stuff]struct{}
,它有效。对地图键类型的要求:
该比较操作符==和=必须为键类型的操作数被完全定义!; 因此键类型不能是函数、映射或切片。
Stuff
是一个结构体,如果满足以下条件,Go 中的结构体是可比的:
如果所有字段都具有可比性,则结构值具有可比性。如果它们对应的非空白字段相等,则两个结构值相等。
如果您的Stuff
结构是您发布的内容,则它是可比较的:它仅包含可比较类型的字段string
。
另请注意,如果您想要一个集合数据结构,如果您使用bool
作为值类型(例如map[Stuff]bool
)和true
作为值,则更清楚,然后您可以简单地使用索引来测试值是否在地图中,因为索引表达式产生如果键(在您的情况下)不在地图中,则值类型(false
for bool
)的零值Stuff
,正确地告诉您要查找的值不在“集合”中。(如果它在地图中,它的关联true
值是索引表达式的结果 - 正确地告诉它在地图中)。
- 1 回答
- 0 关注
- 159 浏览
添加回答
举报