【发布时间】:2022-01-02 16:53:12
【问题描述】:
要知道一个键 k 存在于映射 M1[k]v 中,在 Go 中非常简单。
if v, ok := M1[k]; ok {
// key exist
}
'v':非指针类型的值。
如果v 很大,使用上述方法仅检查特定键是否存在效率不高,因为它会将值v 加载到内存中(即使我在内存中使用空白标识符_ v 的位置,根据我的理解,如果我的理解有误,请在这里纠正我。
是否有一种有效的方法可以检查 Map 中是否存在键(无需读取/或在内存中分配值)?
我正在考虑创建一个新地图M2[k]bool 来存储信息,并在每次我在M1 中插入一些内容时在M2 中输入一个条目。
【问题讨论】:
-
使用
if _, ok := M1[k]; ok { }。如果您使用空白标识符,则不会“加载”该值。 -
如果存在特定键,使用上述方法效率不高,因为它会将值 v 加载到内存中 [...] 是什么让你相信?跨度>
-
@icza 感谢您的回复。去吧
-
见mapaccess2_fat 和朋友。运行时返回一个指向映射值的指针。指向的值仅在应用程序使用时才会被复制。
-
@PenélopeStevens 感谢上述链接。
标签: dictionary go go-map