I want to use set as map value on golang. So I coded like this:
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
}
And I want to use structure like below code:
val := make(map[int]*TestSet)
val[1] = &TestSet{}
val[1].Add(&Test{phoneNumber: "8210", name: "minji", friends: []string{"myself"})
However my TestSet
always has to iterate over the entire item to exist its value. So Add()
time complexity O(n).
I want to reduce that time complexity to O(1). (like python set in
)
But, I do not know what to do. Should I use another map?
Any good ideas?