我认为,没有内置函数rindex(比如在perl中)来获取字符串中最后一次出现的位置。
我试着像这样天真的方式
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
}
这有更优雅的方式吗?
答案 0 :(得分: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"
}