> On Feb 17, 2017, at 11:20 PM, David Waite <da...@alkaline-solutions.com> > wrote: > > >> On Feb 16, 2017, at 5:26 PM, Ben Cohen via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> Hi swift-evolution, >> >> Following up on Ted’s post regarding the opening up of stage 2, I’m starting >> a thread to discuss improvements to the Dictionary type. >> >> Here is a list of commonly requested changes/enhancements to Dictionary, all >> of which would probably be appropriate to put together into a single >> evolution proposal: >> > <snip> >> Add a defaulting subscript get (e.g. counts[key, default: 0] += 1 or >> grouped(key, default:[]].append(value)). > Interesting, most of my scenarios aren’t one line subscript mutations like > this, so I have been happy with counts[key] ?? 0, grouped(key) ?? [], etc. >
As well as a readability/discoverability benefit, there’s also a performance benefit: d[key] = (d[key] ?? []) + [value] is a linear-time operation, whereas d[key, default: []].append(value) should be constant time (there is some work needed on dictionary internals for this to work but the API ought to enable it once that’s done). >> Add capacity property and reserveCapacity() method. > would CoW copies also have the same reserved capacity? Yes, it would mirror arrays, which behave like this. Note dictionaries already have this characteristic – they just don’t expose their capacity or allow you to preemptively expand it. Any other behavior would be tricky. Until its mutated, a CoW copy is a literal copy, so must share the original’s capacity. Once the mutation forces a buffer copy, it would be pretty odd for that capacity to suddenly shrink. > One way I could hypothetically copy around dictionaries that are using > significantly more memory than I suspected,the other way algorithms would be > quite confusing as an assignment to a variable might cause the capacity to > revert. > > In terms of additional features, I have needed to group by value before, e.g. > turn from K->V to V -> [K], which isn’t a simple reduce statement. > If there is a group-by operation from sequences, this ought to be composable from that given dictionaries are (Key,Value) sequences. > -DW
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution