面试题答案
一键面试使用 + 运算符实现
let shortStrings = ["a", "b", "c", "d"]
var longString = ""
for string in shortStrings {
longString += string
}
性能优缺点:
- 优点:代码简单直观,容易理解和编写。
- 缺点:每次使用
+=
运算符时,都会创建一个新的字符串对象,因为字符串在Swift中是值类型,不可变。随着数组长度增加,性能开销会显著增大,因为频繁的内存分配和复制操作。
使用 String(contentsOf:) 实现
该方法主要用于从文件等数据源初始化字符串,并不适用于拼接数组中的短字符串,所以这里不适用这种方式来实现拼接。
使用自定义 StringBuilder 类实现
class StringBuilder {
private var components: [String] = []
func append(_ string: String) {
components.append(string)
}
func toString() -> String {
return components.joined()
}
}
let shortStrings = ["a", "b", "c", "d"]
let builder = StringBuilder()
for string in shortStrings {
builder.append(string)
}
let longString = builder.toString()
性能优缺点:
- 优点:性能较好,因为它先将所有字符串存储在一个数组中,最后只进行一次拼接操作,减少了内存分配和复制的次数。
- 缺点:需要额外编写代码来实现
StringBuilder
类,增加了代码的复杂度。
实际项目场景中的选择
- 少量字符串拼接:如果数组中的字符串数量很少,使用
+
运算符即可,因为其代码简单,开发效率高,性能损耗在这种场景下不明显。 - 大量字符串拼接:对于包含大量短字符串的数组,应使用自定义的
StringBuilder
类或者直接使用joined()
方法(原理类似StringBuilder
),以获得更好的性能,虽然会增加一定的代码复杂度,但能显著提升运行效率。