我正在处理的程序正在进行一些字符串操作,其中包含单词的输出数组将与输入数组相同或更小。例如,输入数组包含100个元素,每个元素是一个单词(变量长度)。操纵后,只有99个元素。让我们说输入数组是500字节。我可以告诉Swift确保输出数组的长度至少为500字节,这样在添加元素时,它不需要将它们移动到内存的不同部分,为元素提供更多空间吗?
答案 0 :(得分:0)
可能存在误解。 Array
存储某些类型T
的值,以及每个类型的值
这些值具有相同的大小。在您的情况下,类型[String]
的数组包含值
类型为struct String
的类型具有固定大小(如Swift中任何类型的值)。
字符串如何管理在实现细节中保存可变数量的字符。
如果您检查Swift源代码,那么您将看到struct String
包含
指向实际字符串存储的指针(该引用计算为实现
带有copy-on-write的值语义。
因此,您可以为给定的数量的元素保留空间以避免数组 添加元素时的重新分配:
var words: [String] = []
words.reserveCapacity(100)
您还可以在字符串的底层存储中保留空间,以避免重新分配 如果字符串被扩展:
var word = ""
word.reserveSpace(1000)
但是你不能保留数组中的容量来保存总数 字符串元素的字符。