+1. One of those things where you wonder why this wasn't the default behavior.
~Robert Widmann 2016/09/28 14:23、Nevin Brackett-Rozinsky via swift-evolution <swift-evolution@swift.org> のメッセージ: > +1, I have been mildly surprised that this was not already present. > > My workaround heretofore has been: > > for idx in abc.indices { > let val = abc[i] > // do something with idx and val > } > > Nevin > > >> On Wed, Sep 28, 2016 at 1:55 PM, Erica Sadun via swift-evolution >> <swift-evolution@swift.org> wrote: >> Gist here: https://gist.github.com/erica/2b2d92e6db787d001c689d3e37a7c3f2 >> >> Introducing indexed() collections >> Proposal: TBD >> Author: Erica Sadun, Nate Cook, Jacob Bandes-Storch, Kevin Ballard >> Status: TBD >> Review manager: TBD >> Introduction >> >> This proposal introduces indexed() to the standard library, a method on >> collections that returns an (index, element) tuple sequence. >> >> Swift-evolution thread: TBD >> >> Motivation >> >> The standard library's enumerated() method returns a sequence of pairs >> enumerating a sequence. The pair's first member is a monotonically >> incrementing integer starting at zero, and the second member is the >> corresponding element of the sequence. When working with arrays, the integer >> is coincidentally the same type and value as an Array index but the >> enumerated value is not generated with index-specific semantics. This may >> lead to confusion when developers attempt to subscript a non-array >> collection with enumerated integers. It can introduce serious bugs when >> developers use enumerated()-based integer subscripting with non-zero-based >> array slices. >> >> Indices have a specific, fixed meaning in Swift, which are used to create >> valid collection subscripts. This proposal introduces indexed() to produce a >> more semantically relevant sequence by pairing a collection's indices with >> its members. While it is trivial to create a solution in Swift, the most >> common developer approach shown here calculates indexes twice: >> >> extension Collection { >> /// Returns a sequence of pairs (*idx*, *x*), where *idx* represents a >> /// consecutive collection index, and *x* represents an element of >> /// the sequence. >> func indexed() -> Zip2Sequence<Self.Indices, Self> { >> return zip(indices, self) >> } >> } >> Incrementing an index in some collections can be unnecessarily costly. In a >> lazy filtered collection, an index increment is potentially O(N). We feel >> this is better addressed introducing a new function into the Standard >> Library to provide a more efficient design that avoids the attractive >> nuisance of the "obvious" solution. >> >> Detailed Design >> >> Our vision of indexed() bypasses duplicated index generation with their >> potentially high computation costs. We'd create an iterator that calculates >> each index once and then applies that index to subscript the collection. >> Implementation would take place through IndexedSequence, similar to >> EnumeratedSequence. >> >> Impact on Existing Code >> >> This proposal is purely additive and has no impact on existing code. >> >> Alternatives Considered >> >> Not yet >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution >> > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution