检查 Golang 映射中是否存在某个值

Din*_*uti 4 performance dictionary go

我正在寻找一种有效的方法来检查 Golang 中是否存在某个值。我知道的方法是使用 for 循环/范围。有更好的方法来做同样的事情吗?

任何帮助,将不胜感激 :)

Tim*_*nes 8

没有内置方法可以查明映射是否包含特定值。如果您需要此行为高效,请考虑使用额外的数据结构来支持它。

请注意,虽然 JavaMap提供了containsValue,但文档中说:

对于大多数 Map 接口的实现来说,此操作可能需要与地图大小成线性关系的时间。

因此,如果您需要 Java Map 的有效实现,您还需要提供一个。

“有效实施”的含义根据您映射的数据类型而变化。例如,如果值始终是唯一的,那么维护 amap[value]key就足够了)。如果不是,那么就需要一些更有原则的东西。


Tit*_*sta 8

当你在 Go 中索引一个映射时,你会得到两个返回值;第二个(可选)是一个布尔值,指示该键是否存在。

\n

如果该键不存在,则第一个值将是默认的零值。

\n

直接在 if 语句中使用第二个返回值。

\n
m := map[string]float64{"pi": 3.14}\nif v, found := m["pi"]; found {\n    fmt.Println(v)\n}\n
Run Code Online (Sandbox Code Playgroud)\n