快速字符串内插产生的字符串需要很长时间才能插入字典

问题描述

在某些情况下,字符串插值产生的字符串比用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 (将#修改为@)