如何在Go中定义集合映射?

我想知道如何在Go中定义集合映射。集合是无序唯一元素的集合。


这些集合是结构(磁贴)的集合。映射的键是一个字符串。关键是瓷砖的组合。X + “,” + 磁贴。


到目前为止,我所拥有的。它只适用于一个元素,而不适用于一个集合。


type Tile struct {

    X int

    Y int

}


func (t Tile) GetKey() {

    return strconv.Itoa(t.X) + "," + strconv.Itoa(t.Y)

}


// This only works for one element, not for a set.

type Cache map[string]Tile


潇湘沐
浏览 90回答 1
1回答

摇曳的蔷薇

如何表示集合Go 中的集合通常用从给定类型到定义其存在的基元值的映射来表示。类型是语义上表示唯一元素的无序集合的方式。mapvar tileSet map[Tile]bool请注意,您可以使用非指针结构作为映射键。因为:Tile映射键必须具有可比性(规格:映射类型)Tile,根据您如何定义它,具有可比性(规格:比较运算符),特别是:如果结构值的所有字段都具有可比性,则这些值是可比较的。如果两个结构值对应的非空白字段相等,则两个结构值相等。...显然这两个领域是可比的。intXY这是您使用此类地图的方式:tileSet = make(map[Tile]bool, 0)tile := Tile{X:1,Y:2}tileSet[tile] = true// check existenceif exists := tileSet[tile]; exists {   // ... }// range over set elementsfor 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] 规格:地图类型必须为键类型的操作数完全定义比较运算符 == 和 !=
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go