Skip to content

Iterator Indexing #73482

Open
Open

Description

@jswrenn

Itertools is considering a PR introducing iterator indexing, implemented in the same manner as the core library's slice indexing mechanism. This playground link demonstrates the gist of it:

// `Itertools::get` indexes an iterator:
assert_eq!(
    (0..5).get(2).collect::<Vec<_>>(),
    vec![2]
);

assert_eq!(
    (0..5).get(..3).collect::<Vec<_>>(),
    vec![0, 1, 2]
);

assert_eq!(
    (0..5).get(2..).collect::<Vec<_>>(),
    vec![2, 3, 4]
);

I'm excited to merge this—it feels like something that ought to be in the standard library—but I want to avoid another {Itertools,Iterator}::flatten debacle; i.e., if the core library later adopts this same method, then itertools users calling this method will have builds break.

Would this addition be a good fit for the core library?

Activity

  1. leonardo-m commented on Jun 18, 2020

    @leonardo-m

    Sounds awesome. It's similar to python itertools.islice function. But I'd like to use the normal array slicing syntax. After this we need a built-in way to match on iterators, and the basic needs are covered.

  2. cuviper commented on Jun 18, 2020

    @cuviper
    Member

    But I'd like to use the normal array slicing syntax.

    The problem is that operator Index only returns &Output, and IndexMut returns &mut Output, so you can't create a new value for the indexing result.

  3. lachlansneff commented on Jun 18, 2020

    @lachlansneff

    An IndexableIter trait seems like an interesting idea.

  4. added
    T-libsRelevant to the library team, which will review and decide on the PR/issue.
    and removed
    T-libs-api[DEPRECATED; DO NOT USE]
    on Aug 12, 2026
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

    A-iteratorsArea: IteratorsC-feature-requestCategory: A feature request, i.e: not implemented / a PR.T-libsRelevant to the library team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions