lastIndex of: 和 firstIndex of: 的解释在 Swift 中的字符串中使用
Explanation of lastIndex of: and firstIndex of: used in a string in Swift
我正在解决Swift中的一个编程问题,我在网上找到了一个我不完全理解的解决方案,问题是:编写一个函数来反转输入中(可能嵌套的)括号中的字符细绳。解决方案是
var inputString = "foo(bar)baz(ga)kjh"
var s = inputString
while let openIdx = s.lastIndex(of: "(") {
let closeIdx = s[openIdx...].firstIndex(of:")")!
s.replaceSubrange(openIdx...closeIdx, with: s[s.index(after: openIdx)..<closeIdx].reversed())
}
print (s) // output: foorabbazagkjh (the letters inside the braces are reversed)
我想详细了解: lastIndex(of:
在这种情况下
以及 let closeIdx = s[openIdx...].firstIndex(of:")")!
的作用
试验这类问题的最佳地点是 Playground. Also, check out the documentation。
现在让我们看一下每个语句:
let openIdx = s.lastIndex(of: "(") // it will find the last index of "(", the return type here is Array.Index?
所以如果我打印索引之后的值,包括直到字符串结尾,它将是
print(s[openIdx!...]) // `!` exclamation is used for forced casting
// (ga)kjh
现在回答你的第二个问题;
let closeIdx = s[openIdx...].firstIndex(of:")")!
让其分解 s[openIdx...]
在第一次迭代中等于 (ga)kjh
因此它将 return 在 a
之后 )
的索引。
建议总是打破语句并了解每个表达式的作用。
我正在解决Swift中的一个编程问题,我在网上找到了一个我不完全理解的解决方案,问题是:编写一个函数来反转输入中(可能嵌套的)括号中的字符细绳。解决方案是
var inputString = "foo(bar)baz(ga)kjh"
var s = inputString
while let openIdx = s.lastIndex(of: "(") {
let closeIdx = s[openIdx...].firstIndex(of:")")!
s.replaceSubrange(openIdx...closeIdx, with: s[s.index(after: openIdx)..<closeIdx].reversed())
}
print (s) // output: foorabbazagkjh (the letters inside the braces are reversed)
我想详细了解: lastIndex(of:
在这种情况下
以及 let closeIdx = s[openIdx...].firstIndex(of:")")!
的作用
试验这类问题的最佳地点是 Playground. Also, check out the documentation。
现在让我们看一下每个语句:
let openIdx = s.lastIndex(of: "(") // it will find the last index of "(", the return type here is Array.Index?
所以如果我打印索引之后的值,包括直到字符串结尾,它将是
print(s[openIdx!...]) // `!` exclamation is used for forced casting
// (ga)kjh
现在回答你的第二个问题;
let closeIdx = s[openIdx...].firstIndex(of:")")!
让其分解 s[openIdx...]
在第一次迭代中等于 (ga)kjh
因此它将 return 在 a
之后 )
的索引。
建议总是打破语句并了解每个表达式的作用。