斯威夫特3中的rindex

时间:2017-01-09 23:04:50

标签: swift string

我认为,没有内置函数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
}

这有更优雅的方式吗?

1 个答案:

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