我試圖把一個十六進制字符串,並插入所有其他角色之間的連字符(如「b201a968」到「b2-01-a9-68」)。我發現有幾種方法可以做到這一點,但問題是我的字符串相當大(8066個字符),而且我能夠最快速地運行它仍然需要幾秒鐘的時間。這些是我嘗試過的方式,以及他們正在接受的時間。任何人都可以幫我優化這個功能嗎?優化加入破折號長斯威夫特字符串
//42.68 seconds
func reformatDebugString(string: String) -> String
{
var myString = string
var index = 2
while(true){
myString.insert("-", at: myString.index(myString.startIndex, offsetBy: index))
index += 3
if(index >= myString.characters.count){
break
}
}
return myString
}
//21.65 seconds
func reformatDebugString3(string: String) -> String
{
var myString = ""
let length = string.characters.count
var first = true
for i in 0...length-1{
let index = string.index(myString.startIndex, offsetBy: i)
let c = string[index]
myString += "\(c)"
if(!first){
myString += "-"
}
first = !first
}
return myString
}
//11.37 seconds
func reformatDebugString(string: String) -> String
{
var myString = string
var index = myString.characters.count - 2
while(true){
myString.insert("-", at: myString.index(myString.startIndex, offsetBy: index))
index -= 2
if(index == 0){
break
}
}
return myString
}
這似乎是一個總理我們並行化的情況 - 嘗試dispatch_apply,也許。 –