【发布时间】:2016-04-24 09:51:49
【问题描述】:
当我在 Swift 中使用 += 运算符将一个字符串附加到另一个字符串时,代码中会执行什么过程?如果我执行 str1+=str2,是在 str1 的末尾分配内存并将 str2 复制到那里,还是为新字符串的组合长度分配内存,然后复制字符串? 我编写了一种将字符串附加在一起的线性方法和一种二等分方法,并对这两种方法进行了计时。二等分方法仅比线性方法快 2 倍。追加过程中是否有任何机制可以解释这两种方法的时间如此相似?
var start = NSDate().timeIntervalSince1970
let _ = stringMe(400000000, str:"Developers! ")
var end = NSDate().timeIntervalSince1970
var duration = end - start;
print("stringMe takes: \(duration)");
start = NSDate().timeIntervalSince1970
let _ = stringMe2(400000000, str:"Developers! ")
end = NSDate().timeIntervalSince1970
duration = end - start;
print("stringMe2 takes: \(duration)");
func stringMe(n:Int, str:String)-> String {
var string = ""
for _ in 0..<n{
string += str
}
return string
}
func stringMe2(n:Int, str:String)->String
{
var string = str
var currentWritten = 1
while currentWritten < n {
if currentWritten*2>n {
string += stringMe2(n-currentWritten, str: str)
break
}
currentWritten*=2
string+=string
}
return string
}
【问题讨论】:
标签: string swift append low-level