通过字符串中的字符向后迭代最常用的Swiftian方法是什么?即像for ch in str
,只是反过来?
我认为我必须遗漏一些明显的东西,因为我刚才能想到的最好的是:
for var index = str.endIndex;
index != str.startIndex;
index = index.predecessor() {
let ch = str[index.predecessor()]
...
}
我意识到“什么是最好的......”可能被归类为主观的;我想我真正想要的是一种简洁易读的方法。
编辑:虽然reverse()工作并且很简洁,但与上面相比,它看起来效率可能非常低,即看起来它实际上并不是向后迭代,而是在字符串中创建字符的完整反向副本。如果你正在寻找一些10,000字符字符串末尾通常是几个字符的东西,那么这比我原来的要糟糕得多。因此,我开放这个问题以吸引其他方法。
答案 0 :(得分:23)
reversed
功能会反转C: CollectionType
并返回ReversedCollection
:
for char in "string".characters.reversed() {
// ...
}
如果您发现reversed
预翻转字符串,请尝试:
for char in "string".characters.lazy.reversed() {
// ...
}
lazy
返回一个延迟评估的序列(LazyBidirectionalCollection
),然后reversed()
返回反向访问的另一个LazyBidirectionalCollection
。
答案 1 :(得分:5)
截至2015年12月,使用Swift 2.1版,正确的方法是
for char in string.characters.reverse() {
//loop backwards
}
字符串不再符合SequenceType<T>
,但其字符集不符合。
答案 2 :(得分:4)
不确定效率,但我会建议
for ch in reverse(str) {
println(ch)
}
答案 3 :(得分:1)
这是一个用于反转不使用reverse(str)
的字符串的代码 // Reverse String
func myReverse(str:String) -> String {
var buffer = ""
for character in str {
buffer.insert(character, atIndex: buffer.startIndex)
}
return buffer
}
myReverse("Paul") // gives “luaP”
只是一个小实验。为了它的价值。
好的,想知道怎么读这个问题......
这会起作用吗?
func ReverseIteration(str:String) {
func myReverse(str:String) -> String {
var buffer = ""
for character in str {
buffer.insert(character, atIndex: buffer.startIndex)
}
return buffer
}
// reverse string then iterate forward.
var newStr = myReverse(str)
for char in newStr {
println(char)
// do some code here
}
答案 4 :(得分:-3)
此?
extension String {
var reverse: String {
var reverseStr = ""
for character in self {
reverseStr = String(character) + reverseStr
}
return reverseStr
}
}