在 Swift 中,追加数组的效率如何?

Posted

技术标签:

【中文标题】在 Swift 中,追加数组的效率如何?【英文标题】:In Swift, how efficient is it to append an array? 【发布时间】:2014-12-30 21:18:06 【问题描述】:

如果您有一个在整个程序过程中可以非常大的数组,那么将数组声明为它将达到的最大大小然后控制您的程序可以访问多少数组会更有效吗?还是在整个程序过程中频繁更改数组的大小?

【问题讨论】:

【参考方案1】:

来自Swift headers,这是关于阵列增长和容量的:

当数组的连续存储空间被填满时,必须分配新的存储空间,并且必须将元素移动到新的存储空间。 Array、ContiguousArray 和 Slice 共享一个指数增长策略,这使得 append 成为一个常数时间操作在分摊到许多调用时。除了 count 属性之外,这些数组类型还有一个 capacity 反映它们在不重新分配的情况下存储元素的潜力,当您知道要存储多少元素时,您可以调用reserveCapacity 抢先重新分配并防止中间重新分配。

阅读后,我想说最好保留所需的容量,只有在发现确实存在问题时才回来优化。如果你一直在假装长度,你会为自己做更多的工作。

【讨论】:

以上是关于在 Swift 中,追加数组的效率如何?的主要内容,如果未能解决你的问题,请参考以下文章

不能用swift在for循环中追加一个数组?

函数返回数组没有在 for 循环 Swift 中获得追加

使用 Swift 和 xcode 追加后,数组中没有数据

Swift:“在展开可选值时意外发现 nil”在数组追加中

Swift 固定大小的数组在每次追加后都会改变大小

Swift数组追加不适用于collectionView重新加载数据