UnderestimatedSpeed ​​in Swift Dictionary

According to the documentation, the Swift Dictionary type has this property called underestimatedCount :

A value less than or equal to the number of items in the collection.

Does anyone know why this is considered useful on Westeros ?!

I am puzzled ...

+7
collections dictionary swift
source share
1 answer

Summary : Technically speaking, underestimatedCount owned by Sequence and inherits Collection and Dictionary . Dictionary does not override the default implementation, which returns zero.


Looking at the source code, it seems that underestimatedCount used as an indicator to determine the growth rate of a volatile collection when new items are added.

Here is a snippet from StringCore.Swift :

 public mutating func append<S : Sequence>(contentsOf s: S) where S.Iterator.Element == UTF16.CodeUnit { ........... let growth = s.underestimatedCount var iter = s.makeIterator() if _fastPath(growth > 0) { let newSize = count + growth let destination = _growBuffer(newSize, minElementWidth: width) 

Similar, from StringCharacterView.swift :

 public mutating func append<S : Sequence>(contentsOf newElements: S) where S.Iterator.Element == Character { reserveCapacity(_core.count + newElements.underestimatedCount) for c in newElements { self.append(c) } } 

Or better yet, from Arrays.swift.gyb :

 public mutating func append<S : Sequence>(contentsOf newElements: S) where S.Iterator.Element == Element { let oldCount = self.count let capacity = self.capacity let newCount = oldCount + newElements.underestimatedCount if newCount > capacity { self.reserveCapacity( Swift.max(newCount, _growArrayCapacity(capacity))) } _arrayAppendSequence(&self._buffer, newElements) } 

Oddly enough, I could only find one implementation for underestimatedCount , in Sequence , and that returns zero.

Currently, it seems that underestimatedCount is more important for custom collection / sequence implementations, as Apple already has a good idea about growing those for standard Swift collections.

+3
source share

All Articles