【问题标题】:What's faster/should be rather used for short(ish) Strings: Split or Substring?什么更快/应该用于短(ish)字符串:拆分或子字符串?
【发布时间】: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


【解决方案1】:

从我非常粗略的测试来看,似乎子字符串版本更快。但是,在您的情况下,我会选择使用使用split 的版本。代码对我来说更具可读性。

【讨论】:

  • 感谢您的回答!如果您已经进行了测试,它是从什么时候开始产生实际影响的?
  • 取决于您所说的“实际差异”。一旦运行它就已经有差异,即使它绝对可以忽略不计。
  • 所以基本上我已经预料到了:除非我将它用于数千个字符串,否则速度无关紧要,对吧?
  • 没错。这里不要关注性能,只写可读易懂的代码。
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 2015-12-28
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 2019-10-11
  • 1970-01-01
相关资源
最近更新 更多