github.com/rehtt/go-map@v0.0.0-20210814074636-2cb08136a29e/map.go (about) 1 package go_map 2 3 type Map struct { 4 m map[string]interface{} 5 l []string 6 index int 7 } 8 9 func New() *Map { 10 return &Map{map[string]interface{}{}, []string{}, 0} 11 } 12 func (m *Map) Set(key string, value interface{}) { 13 if _, ok := m.m[key]; !ok { 14 m.l = append(m.l, key) 15 m.index++ 16 } 17 m.m[key] = value 18 19 } 20 func (m *Map) Get(key string) (interface{}, bool) { 21 v, b := m.m[key] 22 return v, b 23 } 24 func (m *Map) Delete(key string) { 25 delete(m.m, key) 26 for i, k := range m.l { 27 if k == key { 28 if i == 0 { 29 m.l = m.l[1:] 30 } else if i == len(m.l)-1 { 31 m.l = m.l[:i] 32 } else { 33 m.l = append(m.l[:i], m.l[i+1:]...) 34 } 35 } 36 } 37 m.index-- 38 } 39 func (m *Map) Pull2Map() map[string]interface{} { 40 return m.m 41 } 42 func (m *Map) Pull2List() ([]string, []interface{}) { 43 keys := make([]string, 0, m.Len()) 44 values := make([]interface{}, 0, m.Len()) 45 for _, k := range m.l { 46 keys = append(keys, k) 47 values = append(values, m.m[k]) 48 } 49 return keys, values 50 } 51 func (m *Map) Len() int { 52 return m.index 53 }