1 回答
TA贡献1793条经验 获得超6个赞
如何表示集合
Go 中的集合通常用从给定类型到定义其存在的基元值的映射来表示。类型是语义上表示唯一元素的无序集合的方式。map
var tileSet map[Tile]bool
请注意,您可以使用非指针结构作为映射键。因为:Tile
如果结构值的所有字段都具有可比性,则这些值是可比较的。如果两个结构值对应的非空白字段相等,则两个结构值相等。
...显然这两个领域是可比的。int
X
Y
这是您使用此类地图的方式:
tileSet = make(map[Tile]bool, 0)
tile := Tile{X:1,Y:2}
tileSet[tile] = true
// check existence
if exists := tileSet[tile]; exists {
// ...
}
// range over set elements
for tile, _ := range tileSet {
// ...
}
如何表示集合的映射
微不足道的是:
var tileSetMap map[string]map[Tile]bool
为了简化代码,您还可以定义自己的集合类型:
type TileSet map[Tile]bool
然后
func main() {
var tileSetMap map[string]TileSet
// you initialize it normally with make
tileSetMap = make(map[string]TileSet, 0)
tileSetMap["foo"] = make(TileSet, 0)
tile := Tile{10, 20}
tileSetMap["foo"][tile] = true
fmt.Println(tileSetMap) // map[foo:map[{10 20}:true]]
}
游乐场: https://play.golang.org/p/ObUo62SI3ih
[1] 规格:地图类型
必须为键类型的操作数完全定义比较运算符 == 和 !=
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报