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 уже имеет хорошее представление о росте тех.