【发布时间】:2019-06-13 15:36:15
【问题描述】:
Swift 5,Xcode 10。
我正在遍历一个字符串数组(大小可能
johnsmith.20190202102030.conf
janedoe.19700101115959.conf
我事先知道第一部分(姓名),但想提取中间部分(生日:8、12 或 14 个字符长)。
版本 1:
let f = "johnsmith.20190202102030.conf"
let name = "johnsmith"
let start = f.index(f.startIndex, offsetBy: name.count+1)
let end = f.index(f.startIndex, offsetBy: f.count-5)
let birthday = String(f[start..<end])
版本 2:
let f = "johnsmith.20190202102030.conf"
let farr = f.split(separator: ".").map(String.init)
let birthday = farr[1]
我目前只为 10 个字符串执行此操作,并且(当然)没有注意到速度上有任何差异。即使有 100 个字符串,也可能不会有太大区别,但我很好奇:
忽略代码的长度和潜在的错误,是否有理由(除了个人偏好)更喜欢使用一个版本而不是另一个版本(例如,使用 100k 字符串的速度 - 我不是要求实际测量!)?
【问题讨论】:
-
何不自己试一试,看看哪个版本更快?
-
你也可以试试
"johnsmith.20190202102030.conf".drop(while: { $0 != "." }).dropFirst().dropLast(5) -
@wvteijlingen 永远不会有一千个字符串,通常甚至不会超过 10 个,因为我已经事先去掉了不重要的字符串,所以这种规模的测量甚至不会问题(我对实际测量不感兴趣的原因之一)。如果这一切都归结为偏好,那很好,但对 Swift 来说还是相当新的,如果有人知道例如,它仍然会有所帮助。制作一个版本的小调整,让我们称之为“更好”。
-
@user28434 单行,很好。明天去试试,谢谢!
-
编写更易于理解和维护的代码远比在出现实际性能问题之前担心性能要重要得多。
标签: swift optimization split substring