I use enumerated in many location in my code and have never expected it to be indexes but a counting of how many times I have looped. It says clearly what is does on the tin: &quot;Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero, and x represents an element of the sequence.&quot;. I get some new folks have confusion but reading the docs is always part of learning IMHO.<br><br>I would hate to see it removed without strong replacement that is reasonably readable. I think leveraging zip and the potential range style is on the edge of being readable but is learnable.<br><br>-Shawn<br><div class="gmail_quote"><div dir="ltr">On Fri, Feb 3, 2017 at 4:11 PM Erica Sadun via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
&gt; On Feb 3, 2017, at 4:20 PM, Dave Abrahams &lt;<a href="mailto:dabrahams@apple.com" class="gmail_msg" target="_blank">dabrahams@apple.com</a>&gt; wrote:<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; on Fri Feb 03 2017, Erica Sadun &lt;erica-AT-ericasadun.com&gt; wrote:<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt;&gt;&gt; On Feb 3, 2017, at 2:58 PM, Ben Cohen &lt;<a href="mailto:ben_cohen@apple.com" class="gmail_msg" target="_blank">ben_cohen@apple.com</a>&gt; wrote:<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt;&gt; On Feb 3, 2017, at 11:12 AM, Erica Sadun via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
&gt;&gt; &lt;mailto:<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt;&gt; wrote:<br class="gmail_msg">
&gt;&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt;&gt; I believe what people *want* is `indexed` over `enumerated`, and consistently for both array and array slices.<br class="gmail_msg">
&gt;&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; I don’t know if that’s true.<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; Here’s an example (the only use of enumerated) from Alamofire:<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; let acceptLanguage = Locale.preferredLanguages.prefix(6).enumerated().map { index, languageCode in<br class="gmail_msg">
&gt;&gt;&gt;    let quality = 1.0 - (Double(index) * 0.1)<br class="gmail_msg">
&gt;&gt;&gt;    return &quot;\(languageCode);q=\(quality)&quot;<br class="gmail_msg">
&gt;&gt;&gt; }.joined(separator: &quot;, &quot;)<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; Here the intent is a counter, not indices. They just happen to be the same. But if they’d used indexed() it would certainly hurt readability, albeit midly.<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; Suppose there wasn’t an enumerate or an indexed, and zipped was the standard way of doing it. That might lead to another solution:<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; let qualities = stride(from: 1.0, to: 0.4, by: -0.1)<br class="gmail_msg">
&gt;&gt;&gt; let acceptLanguage = Locale.preferredLanguages.zipped(with: qualities).map {<br class="gmail_msg">
&gt;&gt;&gt;    languageCode, quality in &quot;\(languageCode);q=\(quality)&quot;<br class="gmail_msg">
&gt;&gt;&gt; }.joined(separator: &quot;, &quot;)<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;&gt; The use of stride here feels more what was intended, rather than<br class="gmail_msg">
&gt;&gt;&gt; backing into the quality via an “index” value. And avoids any risk<br class="gmail_msg">
&gt;&gt;&gt; with indexed of this getting applied incorrectly to slices.<br class="gmail_msg">
&gt;&gt;&gt;<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; I think enumerated as it stands is an attractive nuisance / moral<br class="gmail_msg">
&gt;&gt; hazard. Most of the language learners I interact with miss the point<br class="gmail_msg">
&gt;&gt; and the nuance of how it works.<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; let list = [0, 1, 2, 3, 4]<br class="gmail_msg">
&gt;&gt; let slice = list[2...3]<br class="gmail_msg">
&gt;&gt; for (idx, value) in slice.enumerated() {<br class="gmail_msg">
&gt;&gt;    print(idx, value)<br class="gmail_msg">
&gt;&gt; }<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; I think people would not expect 0, 2 / 1, 3. I also don’t think they’d<br class="gmail_msg">
&gt;&gt; expect the actual outcome from a dictionary, whether index or<br class="gmail_msg">
&gt;&gt; enumeration because there’s no inherent semantic “enumeration” of<br class="gmail_msg">
&gt;&gt; dictionary values:<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; let dict = [0:&quot;a&quot;, 1:&quot;b&quot;, 2:&quot;c&quot;]<br class="gmail_msg">
&gt;&gt; for (idx, value) in dict.enumerated() {<br class="gmail_msg">
&gt;&gt;    print(idx, value)<br class="gmail_msg">
&gt;&gt; }<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; 0 (2, &quot;c&quot;)<br class="gmail_msg">
&gt;&gt; 1 (0, &quot;a&quot;)<br class="gmail_msg">
&gt;&gt; 2 (1, &quot;b&quot;)<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; I’d like to see enumerated gone and I have a mild preference for<br class="gmail_msg">
&gt;&gt; introducing indexed, either under its own name or as a new behavior<br class="gmail_msg">
&gt;&gt; for enumerated (although T where T.Iterator.Element is Int)<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; 120 gists with “enumerated”, of which a casual scan shows that almost<br class="gmail_msg">
&gt;&gt; none of them are actually using it meaningfully. (Take a look.) I<br class="gmail_msg">
&gt;&gt; think I did this API right:<br class="gmail_msg">
&gt;&gt; <a href="https://api.github.com/search/repositories?q=enumerate+language:swift" rel="noreferrer" class="gmail_msg" target="_blank">https://api.github.com/search/repositories?q=enumerate+language:swift</a><br class="gmail_msg">
&gt;&gt; &lt;<a href="https://api.github.com/search/repositories?q=enumerate+language:swift" rel="noreferrer" class="gmail_msg" target="_blank">https://api.github.com/search/repositories?q=enumerate+language:swift</a>&gt;<br class="gmail_msg">
&gt;&gt; and if so, not much in repos.<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; Ben&#39;s not arguing that enumerated should stay.  He&#39;s just saying that<br class="gmail_msg">
&gt; there&#39;s no good reason to provide indexed(), and I agree with that.<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; --<br class="gmail_msg">
&gt; -Dave<br class="gmail_msg">
<br class="gmail_msg">
And I think I just argued my way to agreeing with him.<br class="gmail_msg">
<br class="gmail_msg">
-- E<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote></div>