5

将来、C スタイルの for ステートメントは Swift から削除されます。strideusingや..<演算子など、C スタイルの for ステートメントを使用する代替方法は多数ありますが、これらは一部の条件でのみ機能します。

String.CharacterView.Indexたとえば、Swift の古いバージョンでは、C スタイルの for ステートメントを使用して、Stringのインデックスを 1 つおきにループすることができました。

for var index = string.startIndex; index < string.endIndex; index = string.successor().successor(){
    //code
}

しかし、これは現在非推奨です。whileループを使用して同じことを行う方法があります

var index = string.startIndex
while index < string.endIndex{
    //code

    index = index.successor().successor()
}

しかし、それは回避策以上のものではありません。..<文字列のすべてのインデックスをループするのに最適な演算子があります

for index in string.startIndex..<string.endIndex

それでも、これは、文字列の 1 つおきのインデックス、または文字列の n 番目ごとインデックスをループするのには役立ちません。

ループ以外の String の他のすべてのインデックスをループする「迅速な」方法はありwhileますか? この質問は、文字列インデックスだけに関係するものではなく.successor()、一般に wherestride..<do not work などの機能を持つオブジェクトに関係します。

4

2 に答える 2

4

関数型プログラミングでやってみましょう:

let text = "abcdefgh"

text.characters
    .enumerate()  // let's get integer index for every character
    .filter { (index, element) in index % 2 == 0 }  // let's filter out every second character
    .forEach { print($0, $1) } // print

結果:

0 a
2 c
4 e
6 g
于 2016-03-24T18:51:58.240 に答える
2

あなたは「ステップ」を使うことができます

let str = "abcdefgh"
for i in str.characters.indices where str.startIndex.distanceTo(i) % 2 == 0 {
    print(i,str.characters[i])
}

版画

0 a
2 c
4 e
6 g

スルタンのメモに基づく更新

for (i,v) in str.characters.enumerate() where i % 2 == 0 {
    print(i, v)
}
于 2016-03-24T06:29:33.697 に答える