我试图把一个十六进制字符串,并插入所有其他角色之间的连字符(如“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,也许。 –