2016-08-24 29 views
7

Zgodnie z dokumentacją, Swift Dictionary typ ma tę właściwość o nazwie underestimatedCount:underestimatedCount w Słowniku Swifta

wartości mniejszej lub równej liczby elementów w kolekcji .

Ktoś wie, dlaczego na Westeros jest to przydatne?

Przegrody mnie ...

+3

Istnieje [dyskusja z listy mailingowej] (https://www.mail-archive.com/[email protected]/msg00614.html) i nie jesteś pierwszym, który narzeka na [złe dokumentacja] (https://bugs.swift.org/browse/SR-991) –

Odpowiedz

3

Podsumowanie: technicznie rzecz biorąc, underestimatedCount należący do Sequence i pobiera dziedziczone przez Collection i Dictionary. Dictionary nie zastępuje domyślnej implementacji, która zwraca zero.


Patrząc na kod źródłowy, wydaje się, że underestimatedCount służy jako wskaźnik do określenia kwoty wzrostu jest zmienny kolekcji kiedy nowe elementy są dodawane do niego.

Oto urywek z 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) 

Podobnie, od 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) 
    } 
    } 

Albo jeszcze lepiej, z 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) 
    } 

dziwo, udało mi się znaleźć tylko jedna implementacja dla underestimatedCount, w Sequence, a ten zwraca zero.

W tej chwili wydaje się, że underestimatedCount ma więcej wartości do niestandardowych implementacji kolekcji/sekwencji, tak jak w przypadku standardowych kolekcji Swift Firma Apple ma już dobre pojęcie o ich rozwoju.