2017-01-09 69 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" 
}