什么是向后遍历字符串字符的好方法?

Mat*_*son 11 swift

通过字符串中的字符向后迭代的最Swiftian方法是什么?即for ch in str,只是反过来?

我想我必须遗漏一些明显的东西,因为我刚才能想到的最好的是:

    for var index = str.endIndex; 
            index != str.startIndex; 
            index = index.predecessor() {
        let ch = str[index.predecessor()]
        ...
    }
Run Code Online (Sandbox Code Playgroud)

我意识到"什么是最好的..."可能被归类为主观的; 我想我真正想要的是一种简洁易读的方法.

编辑:虽然reverse()工作并且很简洁,但与上面相比,它看起来可能效率很低,即看起来它实际上并不是向后迭代,而是在字符串中创建字符的完整反向副本.如果你正在寻找一些10,000字符字符串末尾通常是几个字符的东西,那么这比我原来的要糟糕得多.因此,我暂时搁置这个问题以吸引其他方法.

pNr*_*Nre 25

reversed函数反转a C: CollectionType并返回ReversedCollection:

for char in "string".characters.reversed() {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您发现reversed预先反转字符串,请尝试:

for char in "string".characters.lazy.reversed() {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

lazy返回一个延迟评估的序列(LazyBidirectionalCollection)然后reversed()返回另一个LazyBidirectionalCollection反向访问的序列.

  • 有趣 - 我不知道'懒惰'.谢谢! (2认同)

pbu*_*h25 5

截至2015年12月,使用Swift 2.1版,正确的方法是

for char in string.characters.reverse() {
    //loop backwards
}
Run Code Online (Sandbox Code Playgroud)

字符串不再符合SequenceType<T>但其字符集符合.