37 lines
691 B
Go
37 lines
691 B
Go
package helpers
|
|
|
|
type OrderedMap[K comparable, V any] struct {
|
|
keys []K
|
|
data map[K]V
|
|
}
|
|
|
|
func NewOrderedMap[K comparable, V any]() *OrderedMap[K, V] {
|
|
return &OrderedMap[K, V]{
|
|
keys: make([]K, 0),
|
|
data: make(map[K]V),
|
|
}
|
|
}
|
|
|
|
func (om *OrderedMap[K, V]) Set(key K, value V) {
|
|
if _, exists := om.data[key]; !exists {
|
|
om.keys = append(om.keys, key)
|
|
}
|
|
om.data[key] = value
|
|
}
|
|
|
|
func (om *OrderedMap[K, V]) Range(fn func(K, V) bool) {
|
|
for _, key := range om.keys {
|
|
if !fn(key, om.data[key]) {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
func (om *OrderedMap[K, V]) ToSlice() []V {
|
|
result := make([]V, 0, len(om.keys))
|
|
for _, key := range om.keys {
|
|
result = append(result, om.data[key])
|
|
}
|
|
return result
|
|
}
|