Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iter.Seq and naming changes #44

Open
pd93 opened this issue Sep 9, 2024 · 0 comments
Open

iter.Seq and naming changes #44

pd93 opened this issue Sep 9, 2024 · 0 comments

Comments

@pd93
Copy link

pd93 commented Sep 9, 2024

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:

  • All() would be identical to the current Iterator() method, but again, would be more idiomatic.
  • Values() was never implemented previously so no problems adding this.
  • As we currently have ReverseIterator() maybe we should have AllFromFront() and AllFromBack() instead. This is both idiomatic and consistent with the naming in this package. All() could be an alias for AllFromFront().

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant