func getRepeats(_ string: String, _ k: Int = 1) {
var length = string.count
if (k > length / 2) {
return
}
sleep(2)
for i in stride(from: 0, to: length - k, by: k) {
var part_1 = Array(string)[i..<length]
var part_2 = Array(part_1)[0..<k]
var part_3 = Array(string)[i..<length]
var part_4 = Array(part_3)[k..<k*2]
print(part_2, part_4)
}
getRepeats(string, k+1)
}
getRepeats("abcabc")
该函数显示字符串的子序列。
取而代之的是:
var part_1 = Array(string)[i..<length]
var part_2 = Array(part_1)[0..<k]
我愿意:
part_1 = Array(string)[i..<length][0..<k]
但这不起作用,这是错误: fatal error :ArraySlice 索引超出范围(在 startIndex 之前)
也许告诉我其他有用的东西,在此先感谢!
最佳答案
两行:
let part_1 = Array(string)[i..<length]
let part_2 = Array(part_1)[0..<k]
可以合二为一:
let part_2 = Array(string)[i..<length][i..<(k+i)]
表达式Array(string)[i..<length]
返回 ArraySlice
.要记住的重要一点是切片的索引不一定从 0 开始。它们从您用来访问切片的任何索引开始。在这种情况下,i
.
因此您的第二次访问 [0..<k]
需要转移到以i
开头.这给出了 [i..<(k+i)]
.
关于swift - 如何使功能代码更清晰和优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57382701/