根据文档,Swift的Dictionary
类型具有名为underestimatedCount
的此属性:
小于或等于中的元素数量的值 集合。
任何人都知道为什么维斯特洛斯这被认为是有用的??!
让我感到困惑......
答案 0 :(得分:5)
摘要:从技术上讲,underestimatedCount
属于Sequence
,并由Collection
和Dictionary
继承。 Dictionary
不会覆盖返回零的默认实现。
查看源代码,似乎underestimatedCount
用作指示,以确定在添加新项目时可变集合的增长量。
以下是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)
同样地,来自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)
}
}
甚至更好,来自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)
}
奇怪的是,我只能在Sequence中找到underestimatedCount
的一个实现,并且该实现返回零。
此时似乎underestimatedCount
对集合/序列的自定义实现更有价值,对于标准的Swift集合,Apple已经对这些集合的增长有了一个很好的了解。