map.go 504 B

1234567891011121314151617181920212223242526272829303132
  1. package ordered
  2. type Map[K comparable, V any] struct {
  3. s []K
  4. m map[K]V
  5. }
  6. func NewMap[K comparable, V any]() *Map[K, V] {
  7. return &Map[K, V]{
  8. s: make([]K, 0),
  9. m: make(map[K]V),
  10. }
  11. }
  12. type iter_Seq2[K, V any] func(func(K, V) bool)
  13. func (m *Map[K, V]) Items() iter_Seq2[K, V] {
  14. return func(yield func(K, V) bool) {
  15. for _, k := range m.s {
  16. if !yield(k, m.m[k]) {
  17. return
  18. }
  19. }
  20. }
  21. }
  22. func (m *Map[K, V]) Add(k K, v V) {
  23. if _, ok := m.m[k]; !ok {
  24. m.s = append(m.s, k)
  25. m.m[k] = v
  26. }
  27. }