underestimatedCount в Свифт словарь
согласно документации, Swift Dictionary
type имеет это свойство с именем underestimatedCount
:
значение, меньшее или равное количеству элементов в коллекция.
кто-нибудь знает, почему на Вестеросе и это считается полезным??!
сбивает меня с толку...
1 ответов
резюме: технически говоря, underestimatedCount
принадлежит Sequence
, и наследуется Collection
и Dictionary
. Dictionary
не переопределить реализацию по умолчанию, которая возвращает ноль.
глядя на исходный код, похоже, что underestimatedCount
используется в качестве индикатора для определения величины роста изменяемой коллекции при добавлении в нее новых элементов.
вот фрагмент из StringCore.Свифт!--20-->:
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)
кроме того, с StringCharacterView.Свифт!--20-->:
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)
}
}
или даже лучше, от массивы.быстрый.гыбь:
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)
}
как ни странно, я смог найти только одну реализацию для underestimatedCount
, в последовательность, и возвращает ноль.
в это время кажется, что underestimatedCount
имеет большее значение для пользовательских реализаций коллекций / последовательностей, как для стандартные коллекции Swift Apple уже имеет хорошее представление о росте тех.