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  }