Swift - 正则表达式与组件/连接:这对于字符串操作更有效

时间:2018-06-19 04:47:01

标签: swift regex string

我需要删除Swift中单词之间过多的空格(给定字符串中不会超过5个单词),不确定哪个更有效:正则表达式还是正常组件和连接?

例如:

Hello   world! My name is     Tom.

结果:

Hello world! My name is Tom.

方法1:

let result = input.components(separatedBy: " ").filter { string -> Bool in
    return string.isEmpty == false
}.joined(separator: " ")

方法2:

let result = input.replacingOccurrences(of: "[ \t]+", with: " ", options: .regularExpression, range: range)

1 个答案:

答案 0 :(得分:0)

我进行了一些性能测试,将罗密欧和朱丽叶的整个脚本逐行提供给两个函数(参见online sample)。

我实际上有点惊讶的是,正则表达式替换几乎与组件/字符串操作相同:正则表达式只慢了~2倍:

|     Approach      | abs. running time | cpu time | Time to evaluate func | memory peak |
|-------------------|-------------------|----------|-----------------------|-------------|
| components/string | 0.21 sec          | 0.2 sec  | 0.11 sec              | 9 Mb        |
| regex replace     | 0.33 sec          | 0.36 sec | 0.21 sec              | 34 Mb       |

这并不意味着什么。可能唯一明显的区别是峰值内存消耗。但即使你在合理数量的并行循环中运行正则表达式替换它应该没问题。尽管如此,始终使用您的真实代码运行自己的测试。

然而,底线由rmaddy

评论
  

使用您喜欢的代码,更容易阅读和维护。