文字列内の文字を逆方向に反復する最も迅速な方法は何ですか?つまりfor ch in str
、逆にだけ?
私が今思いつくことができた最高のものは次のとおりだったので、私は明白な何かを見逃しているに違いないと思います。
for var index = str.endIndex;
index != str.startIndex;
index = index.predecessor() {
let ch = str[index.predecessor()]
...
}
「何が最高か...」は主観的なものとして分類されるかもしれないことを私は理解しています。私が本当に探しているのは、これを行うための簡潔でありながら読みやすい方法だと思います。
編集:reverse()は機能し、簡潔ですが、これは上記と比較して非常に非効率的であるように見えます。つまり、実際には逆方向に反復しているのではなく、文字列内の文字の完全な逆コピーを作成しているようです。たとえば、通常10,000文字の文字列の末尾から数文字であるものを探している場合、これは私のオリジナルよりもはるかに悪いでしょう。したがって、他のアプローチを引き付けるために、この質問を少し開いたままにしておきます。
このreversed
関数C: CollectionType
はaを逆にして、ReversedCollection
:を返します。
for char in "string".characters.reversed() {
// ...
}
reversed
文字列が事前に反転していることがわかった場合は、次のことを試してください。
for char in "string".characters.lazy.reversed() {
// ...
}
lazy
遅延評価されたシーケンス(LazyBidirectionalCollection
)をreversed()
返し、次にLazyBidirectionalCollection
逆にアクセスされた別のシーケンスを返します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加