2017-01-09 136 views
1

我认为,没有内建函数rindex(如perl)来获取字符串中最后一个字符的位置。rindex in Swift 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)的扩展而不是自由浮动功能。另外,考虑到字符串索引String.Index而不是Int,我会建议返回,而不是。

然后,您可以实现它,像这样:

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" 
}