一个简单的例子是编写一个算法,确保没有两个连续的字符是相同的(aabbcc - > abacbc)。这需要重复使用单个字符访问。除了n字母字符串中的字符m的每次访问花费O(n)时间之外,默认实现非常麻烦。
什么被认为是最好的方法?
let letters = string.characters.map { $0 }
通过索引访问数组。
extension String {
subscript(index: Int) -> Character {
get {
return characters[characters.index(startIndex, offsetBy: index)]
}
set {
let firstIndex = characters.index(startIndex, offsetBy: index)
let lastIndex = characters.index(firstIndex, offsetBy: 1)
replaceSubrange(firstIndex..<lastIndex, with: String(newValue))
}
}
}
使用string[3]
。
或许还有一些我不知道的内置方式?我一直在使用map
,因为它有O(1)访问时间,但O(n)内存使用情况。