<div dir="ltr">Thanks Brent for your in-depth response - I&#39;ve responded in another thread so we don&#39;t pollute this one (sorry Jonathan): <a href="http://thread.gmane.org/gmane.comp.lang.swift.evolution/14665">http://thread.gmane.org/gmane.comp.lang.swift.evolution/14665</a><div><br></div><div>I think mapValues is great, and really needed in Swift.</div><div><br></div><div>I&#39;m a definite +1 on a version of map that only maps the values.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Apr 16, 2016 at 7:56 AM, Brent Royal-Gordon <span dir="ltr">&lt;<a href="mailto:brent@architechies.com" target="_blank">brent@architechies.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">&gt; This is a clarification on what I meant (I haven&#39;t had much time to test it, but I think it&#39;s representative):<br>
&gt;<br>
&gt; <a href="https://gist.github.com/therealbnut/c223d90a34bb14448b65fc6cc0ec70ac" rel="noreferrer" target="_blank">https://gist.github.com/therealbnut/c223d90a34bb14448b65fc6cc0ec70ac</a><br>
<br>
</span>There are a number of problems with this:<br>
<br>
* Given just an `Index`, you need to be able to calculate the next `Index`, and check if it lies before the `endIndex`. The complexity of this is hidden in your example because you&#39;re relying on a traditional `DictionaryIndex` to perform these tasks. Thus, the `Index` type in your dictionary design would be some sort of wrapper-around-the-key, not the key itself. That&#39;s the source of the `subscript(_: Index) -&gt; Value` which apparently confused you.<br>
<br>
* Generic `SequenceType` and `CollectionType` operations now use only the values, not the keys and values. That means that `Array(newDictionary)` gets you an array of values, `filter` returns an array of values, `reduce` operates only on the values, etc; all of these operations throw away the keys. That&#39;s not necessarily wrong, but I&#39;m not sure that you&#39;re aware of it.<br>
<br>
* Your `map` is overloading `SequenceType.map` merely by return type. That means you can no longer assign it directly to a newly-declared variable, or use it in many other contexts where the type has to be inferred.<br>
<br>
* Your `enumerate` is similarly overloading by return type. It&#39;s also further confusing an already confused semantic. `enumerate` does not pair elements with their indices; it pairs them with integers starting at zero. This *happens* to correspond to their array indices, but that&#39;s not necessarily true of any other Collection. (I&#39;m going to start another thread about this.)<br>
<br>
Basically, in this conception of Dictionary:<br>
<br>
* The keys are disposable and the values are the important part—most operations on a Dictionary would throw away the keys and use only the values.<br>
* Index still would not be a Key—it would be some kind of instance which wrapped or converted into a Key.<br>
* You still would need to name Dictionary-creating `map` and similar functions differently from their Array-generating cousins.<br>
* Iterating over keys and values together would require some kind of Dictionary-specific API, not something that was available on other collections or sequences.<br>
<br>
Maybe that would be an improvement, but I&#39;m skeptical.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
</font></span></blockquote></div><br></div>