我正在开发的一个程序正在执行一些字符串操作,其中包含单词的输出数组将与输入数组相同或小于输入数组。例如,输入数组包含 100 个元素,每个元素是一个单词(长度可变)。经过处理后,只有99个元素。假设输入数组为 500 字节。我能否告诉 Swift 确保输出数组的长度至少为 500 字节,以便在添加元素时不需要多次将它们移动到内存的不同部分,从而为元素提供更多空间?
最佳答案
可能存在误解。 Array
存储某种类型 T
的值,并且每个
这些值具有相同的大小。在您的情况下, [String]
类型的数组保存值
struct String
类型,具有固定大小(就像 Swift 中任何类型的值一样)。
字符串如何在实现细节中设法保存可变数量的字符。 如果您检查 Swift 源代码,您会发现 struct String 包含 指向实际字符串存储的指针(通过引用计数来实现 具有写时复制的值语义)。
因此,您可以为给定数量的元素保留空间以避免数组 添加元素时重新分配:
var words: [String] = []
words.reserveCapacity(100)
您还可以在字符串的底层存储中保留空间以避免重新分配 如果字符串被扩展:
var word = ""
word.reserveSpace(1000)
但是您不会在数组中保留容量来容纳总数 其字符串元素的字符数。
关于arrays - 在 Swift 中定义数组容量(以字节数为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752456/