Golang 中的地图集

如果我有一个像这样的结构:


type Foo struct {

  title string

  Tags map[string]string

}

如何维护一组独特的此类结构?据我所知,虽然结构相等是一回事 - 映射相等不是。这意味着我无法比较上面的结构。因此,我不能仅将地图实现为 set pattern。


我能想到的可能有效的两个选项是:将标签转换为已排序[][]string或使用 reflect.Deepequal。有人有更好的主意吗?


当年话下
浏览 208回答 3
3回答

冉冉说

你确定你的例子有效吗?我相信你必须传递一个指向 Add() 方法的指针才能让你的代码工作。无论如何,这是我的实现:package math// typestype IntPoint struct {    X, Y int}// set implementation for small number of itemstype IntPointSet struct {    slice []IntPoint }// functionsfunc (p1 IntPoint) Equals(p2 IntPoint) bool {    return (p1.X == p2.X) && (p1.Y == p2.Y)}func (set *IntPointSet) Add(p IntPoint) {    if ! set.Contains(p) {        set.slice = append(set.slice, p)    }}func (set IntPointSet) Contains(p IntPoint) bool {  for _, v := range set.slice {    if v.Equals(p) {      return true    }  }  return false}func (set IntPointSet) NumElements() int {    return len(set.slice)}func NewIntPointSet() IntPointSet {  return IntPointSet{(make([]IntPoint, 0, 10))}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go