package collections type OrderedMap[K comparable, V any] struct { keys []K values map[K]V } func OrderedMapOf[K comparable, V any]() OrderedMap[K, V] { return OrderedMap[K, V]{ keys: make([]K, 0), values: make(map[K]V), } } func (orderedMap *OrderedMap[K, V]) Set(key K, value V) { if _, exists := orderedMap.values[key]; !exists { orderedMap.keys = append(orderedMap.keys, key) } orderedMap.values[key] = value } func (orderedMap *OrderedMap[K, V]) Get(key K) (V, bool) { value, exists := orderedMap.values[key] return value, exists } func (orderedMap *OrderedMap[K, V]) All() []V { result := make([]V, 0, len(orderedMap.keys)) for _, key := range orderedMap.keys { result = append(result, orderedMap.values[key]) } return result } func (orderedMap *OrderedMap[K, V]) Len() int { return len(orderedMap.keys) }