登录
首页 >  Golang >  Go问答

Go 中如何声明映射集合?

来源:stackoverflow

时间:2024-03-01 21:57:26 396浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Go 中如何声明映射集合?》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

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

集合是结构(tile)的集合。 地图的键是一个字符串。关键是tile.x+“,”+tile.y的组合。

到目前为止我所拥有的。它仅适用于一个元素,不适用于一组。

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

正确答案


如何表示集合

go 中的集合有 usually 个,用从给定类型到定义其存在的原始值的映射来表示。 map 类型是您如何在语义上表示唯一元素的无序集合的方式。

vartileset地图[tile]bool

请注意,您可以使用非指针 tile 结构作为映射键。因为:

如果结构体的所有字段都可比较,则结构体值也可比较。如果两个结构体值对应的非空白字段相等,则它们相等。

...显然,两个 int 字段 xy 是可比较的。

这就是如何使用这样的地图:

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 {
   // ...
}

如何表示集合的映射

简单地说:

vartilesetmap地图[字符串]地图[tile]bool

为了简化代码,您还可以定义自己的集合类型:

type tileset 地图[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]规格:Map Types

必须为键类型的操作数完全定义比较运算符 == 和 !=

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>