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@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.

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to