我想在 golang 上使用 set 作为映射值。所以我这样编码:
import (
"fmt"
"reflect"
)
type TestSet struct {
Items []Test
}
func (ts *TestSet) Add(t *Test) {
ok := true
for _, item := range ts.Items {
if item.Equal(t) {
ok = false
break
}
}
if ok {
ts.Items = append(ts.Items, *t)
}
}
type Test struct {
phoneNumber string
name string
friends []string // i add this field! (**edit**)
}
func (t *Test) Equal(t2 *Test) bool {
if t.phoneNumber != t2.phoneNumber || t.name != t2.name {
return false
}
if !reflect.DeepEqual(t.friends, t2.friends) {
return false
}
return true
}
我想使用如下代码的结构:
val := make(map[int]*TestSet)
val[1] = &TestSet{}
val[1].Add(&Test{phoneNumber: "8210", name: "minji", friends: []string{"myself"})
然而,我TestSet总是必须遍历整个项目才能存在它的价值。所以Add()时间复杂度O(n)。
我想将时间复杂度降低到 O(1)。(像蟒蛇集 in)
但是,我不知道该怎么办。我应该使用另一张地图吗?
有什么好主意吗?
慕森王
白猪掌柜的
扬帆大鱼
相关分类