2017-01-09 6 views
1

私は、文字列内の最後の文字の位置を得るための組み込み関数rindex(perlのような)はありません。スウィフトのrindex 3

私は

func rindex (_ s:String, _ needle:Character) -> Int? 
{ var pos = s.characters.count 

    for char in s.characters.reversed() 
    { 
    if (char == needle) 
    { return pos; 
    } 
    pos -= 1 
    } 
    return nil 
} 

このため、よりエレガントな方法があります。このような素朴な方法で試してみましたか?

答えて

4

まずはフリーフローティング機能ではなく、String(またはさらにはString.CharacterView)という拡張子を使用することをお勧めします。また、文字列はIntではなくString.Indexでインデックスされているので、代わりに返すことをお勧めします。

あなたはそのようにようにそれを実現することができます。

extension String { 
    func lastIndex(of character: Character) -> Index? { 
     return characters.indices.reversed().first(where: {self[$0] == character}) 
    } 
} 
  • indicesはあなたの文字列の文字のインデックスを提供します。

  • reversed()は、これらのインデックスを逆に表示します。

  • first(where:)は、インデックスが見つかるまで、これらの逆インデックスを繰り返します。インデックスの要素が探している文字です。

あなたはそのようにようにそれを使用することができます:

let string = "foobarbaz" 

if let index = string.lastIndex(of: "a") { 
    print(index) // Index(_base: Swift.String.UnicodeScalarView.Index(_position: 7), _countUTF16: 1) 
    print(string[index]) // "a" 
}