我理解array.count(数组中元素的数量).count对迭代数组的元素很有用.我有点得到array.capacity的要点
capacity一个整数值,表示数组在不重新分配的情况下可以存储的总元素数(只读).
实验
我一直在玩Playground,发现数组的容量是偶数(加2)
var arr = [1, 2, 3 , 4, 5, 6, 7]
arr.removeLast() // capacity stays the same after a removal
println(arr.capacity) // 8
println(arr.count) // 6
var arr = [1, 2, 3 , 4, 5, 6]
arr.removeLast()
println(arr.capacity) // 6
println(arr.count) // 5
Run Code Online (Sandbox Code Playgroud)
这个问题
阵列容量有什么用?请举一个具体的例子?
rob*_*off 15
数组的容量 - 特别是其reserveCapacity方法 - 允许您预先分配数组中的空间.
如果要向阵列添加元素,并且超出其容量,则阵列必须增加其容量.由于Swift数组将其元素连续存储在内存中,因此必须重新分配其内部存储并(通常)将其所有元素从旧存储复制到新存储.(注意,NSArray没有记录连续存储其元素,但我们可以推断Swift数组可能基于withUnsafeMutableBufferPointer方法的存在.)
如果您事先知道要向阵列添加多少元素,则可以使用该reserveCapacity方法预设阵列的容量,以便不需要执行任何重新分配(以及相关的复制).
我能想到要求阵列的容量的唯一原因是了解系统的工作原理,并调试性能问题.
通常您不必担心预留容量.重新分配很少是性能问题.Swift使用(我相信)一个有效的重新分配计划,以便重新分配的数量在数组的最终计数中是对数的.例如,如果您一次添加一个百万个元素,Swift应该执行不超过20-30个重新分配.
但是,如果您知道您的阵列将非常大(例如,Mac上的千兆字节或iOS设备上的几十兆字节),或者您是在性能敏感的代码路径中填充阵列(例如填充将启动的音频缓冲区)在微秒内播放),您可能希望保留容量并避免重新分配.
您可能不应该担心保留容量,除非您知道重新分配是一个问题,因为分析器显示它们是瓶颈或因为您有其他证据(如音频缓冲区示例中的音频故障).
| 归档时间: |
|
| 查看次数: |
3750 次 |
| 最近记录: |