elliotchance / orderedmap

🔃 An ordered map in Go with amortized O(1) for Set, Get, Delete and Len.
MIT License
849 stars 63 forks source link

iter.Seq and naming changes #44

Open pd93 opened 2 months ago

pd93 commented 2 months ago

It would be nice to have the following methods available:

func (m *OrderedMap[K, V]) All() iter.Seq2[K, V] {...}
func (m *OrderedMap[K, V]) Keys() iter.Seq[K] {...}
func (m *OrderedMap[K, V]) Values() iter.Seq[V] {...}

These would line up nicely with the newly implemented All, Keys and Values functions in the standard maps package. Adding the two iter.Seq methods also allows for compatibility with slices.Collect.

Unfortunately, Keys() conflicts with the existing pre-iterators method and would require a major version change (or a different name). For the long-term I think the package would benefit from this consistency with the standard library. Also, the current version of the Keys() method can be inefficient on large maps and moving to an iterator by default instead is a good API improvement IMO.

Some other points:

I understand that a major API change isn't always desirable, but I believe these changes will benefit the design in the long-term. I've created a branch with the proposed changes in my fork.