[swift-evolution] [Proposal Draft] Provide Custom Collections for Dictionary Keys and Values

Daniel Vollmer lists at maven.de
Wed Oct 12 05:40:13 CDT 2016


Hi,

I very much think the points mentioned in the motivation are worth addressing (and IMO this is not an area where “maybe the optimizer can be made smarter” can cut it; I want performance guarantees, not hopes).

> On 11 Oct 2016, at 23:28, Nate Cook via swift-evolution <swift-evolution at swift.org> wrote:

[snip]

On a shallow read I like presented approach, except for

> Both the keys and values collections share the same index type as Dictionary. This allows the above sample to be rewritten as:
> 
> // Using `dict.keys.index(of:)`
> if let i = dict.keys.index(of: "one") {
>     dict.values[i].append(1)
> } else {
>     dict["one"] = [1]
> }

The asymmetry between the if / else branches seems ugly to me. That is once obtaining the value “directly” from dict, and once through the values-view. I don’t have a great solution here, but is is possible to subscript the dict by its `Index` as well as its `Key`?

```
// Using `dict.keys.index(of:)`
if let i = dict.keys.index(of: "one") {
    dict[i].append(1)
} else {
    dict["one"] = [1]
}
```

On another note, I’m not sure whether there is a way (or whether it’s even worth trying) to avoid hashing the key twice when the `else` branch is taken.

	Daniel.



More information about the swift-evolution mailing list