Skip to content

Do we need a rfind_map? #949

@Xenira

Description

@Xenira
Contributor

While implementing DoubleEndedIterator for FilterMapOk i stumbled over the find_map in the Iterator's next implementation.
The most straight forward way to implement next_back would be to just inverse that, but rfind_back does not exist.

Would that be something itertools could need?

Activity

Philippe-Cholet

Philippe-Cholet commented on May 27, 2024

@Philippe-Cholet
Member

I think the std lib dismissed the idea, probably not more efficient than the alternative. I don't know where to find the info though.

The only thing related I have is #818 (comment) where we had the same thought.

Is it really missing though?

Xenira

Xenira commented on May 27, 2024

@Xenira
ContributorAuthor

Just struck me as odd, that there is find_map and no rfind_map. But guess rev() works fine as well and keeps the trait concise.

scottmcm

scottmcm commented on May 27, 2024

@scottmcm
Contributor

I've never sure where to stop for adding the reverse versions of things. Like rall and rany feel clearly superfluous, yet rposition is worth it because it's not just .rev().position.

This started me thinking "well why don't you want to write .rev().find_map?", where my guess is that the biggest reason is that rev takes self. So here's a stab at asking libs-api to let you write .as_rev().find_map instead, which would hopefully lessen the need to add more r versions of things: rust-lang/libs-team#385

Xenira

Xenira commented on May 27, 2024

@Xenira
ContributorAuthor

Well, maybe a bit constructed, but rall and rany could make sense if you know elements are not evenly distributed and the iterator may short circuit earlier :P

scottmcm

scottmcm commented on May 27, 2024

@scottmcm
Contributor

Yeah, not saying that you'd never want to run them backwards, just that they seems unusual enough to not need a dedicated method on DoubleEndedIterator.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @Xenira@scottmcm@Philippe-Cholet

        Issue actions

          Do we need a `rfind_map`? · Issue #949 · rust-itertools/itertools