> On Feb 3, 2017, at 2:58 PM, Ben Cohen <ben_co...@apple.com> wrote: > > >> On Feb 3, 2017, at 11:12 AM, Erica Sadun via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> I believe what people *want* is `indexed` over `enumerated`, and >> consistently for both array and array slices. >> > > I don’t know if that’s true. > > Here’s an example (the only use of enumerated) from Alamofire: > > let acceptLanguage = Locale.preferredLanguages.prefix(6).enumerated().map { > index, languageCode in > let quality = 1.0 - (Double(index) * 0.1) > return "\(languageCode);q=\(quality)" > }.joined(separator: ", ") > > 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. > > Suppose there wasn’t an enumerate or an indexed, and zipped was the standard > way of doing it. That might lead to another solution: > > let qualities = stride(from: 1.0, to: 0.4, by: -0.1) > let acceptLanguage = Locale.preferredLanguages.zipped(with: qualities).map { > languageCode, quality in "\(languageCode);q=\(quality)" > }.joined(separator: ", ") > > The use of stride here feels more what was intended, rather than backing into > the quality via an “index” value. And avoids any risk with indexed of this > getting applied incorrectly to slices. >
I think enumerated as it stands is an attractive nuisance / moral hazard. Most of the language learners I interact with miss the point and the nuance of how it works. let list = [0, 1, 2, 3, 4] let slice = list[2...3] for (idx, value) in slice.enumerated() { print(idx, value) } I think people would not expect 0, 2 / 1, 3. I also don’t think they’d expect the actual outcome from a dictionary, whether index or enumeration because there’s no inherent semantic “enumeration” of dictionary values: let dict = [0:"a", 1:"b", 2:"c"] for (idx, value) in dict.enumerated() { print(idx, value) } 0 (2, "c") 1 (0, "a") 2 (1, "b") I’d like to see enumerated gone and I have a mild preference for introducing indexed, either under its own name or as a new behavior for enumerated (although T where T.Iterator.Element is Int) 120 gists with “enumerated”, of which a casual scan shows that almost none of them are actually using it meaningfully. (Take a look.) I think I did this API right: https://api.github.com/search/repositories?q=enumerate+language:swift <https://api.github.com/search/repositories?q=enumerate+language:swift> and if so, not much in repos.
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution