为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中的地图集

Golang 中的地图集

Go
当年话下 2021-06-29 13:11:42
如果我有一个像这样的结构:type Foo struct {  title string  Tags map[string]string}如何维护一组独特的此类结构?据我所知,虽然结构相等是一回事 - 映射相等不是。这意味着我无法比较上面的结构。因此,我不能仅将地图实现为 set pattern。我能想到的可能有效的两个选项是:将标签转换为已排序[][]string或使用 reflect.Deepequal。有人有更好的主意吗?
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

你确定你的例子有效吗?我相信你必须传递一个指向 Add() 方法的指针才能让你的代码工作。无论如何,这是我的实现:


package math


// types


type IntPoint struct {

    X, Y int

}


// set implementation for small number of items

type IntPointSet struct {

    slice []IntPoint 

}


// functions


func (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))}

}


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信