问题描述
在某些情况下,字符串插值产生的字符串比用String(format:)
产生的字符串更慢地用作字典键。输入以下代码:
var map = [String: String]()
let start = Date()
for _ in 0..<100000 {
var s = "asdf"
s = (s as NSString).appendingPathComponent("")
s = transform(s)
s = (s as NSString).substring(from: 1)
map[s] = s
}
print(-start.timeIntervalSinceNow)
func transform(_ s: String) -> String {
return "\(s)/\(s)"
// return String(format: "%@/%@",s,s)
}
在Mac上,我在控制台上打印了0.69秒的时间间隔(使用字符串插值时),但是在注释掉第13行和第14行注释(以便我们使用String(format:)
)时,我得到了时间间隔为0.33秒,不到一半的时间。奇怪的是,每当取消注释第5行或第7行时,字符串插值都会更快。另外,注释掉第8行(map[s] = s
)时,使用字符串插值的版本比使用String(format:)
的版本要快。
这花费了我很多时间,因为我希望这两种方法都可以产生相同类型的字符串,但是字符串插值总是更快。有人知道为什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)