在Swift数组中,是否有一个函数返回基于where子句的最后一个索引?

Rob*_*aio 3 swift

Swift数组的函数索引根据where子句中的条件返回第一个元素.有没有办法得到这个条件的最后一个元素?

例如,我想要这样的东西(我知道没有名为lastIndex的函数.这个函数或类似的东西是我正在搜索的):

let array = [1, 2, 3, 4, 5, 3, 6]

let indexOfLastElementEquals3 = array.lastIndex(where: { $0 == 3 })

print(indexOfLastElementEquals3) //5 (Optional)
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 7

lastIndex(where:) 在Swift 4.2中添加了相关的方法,参见

在早期的Swift版本中,您可以index(where:)在集合的反向视图上使用:

let array = [1, 2, 3, 4, 5, 3, 6]

if let revIndex = array.reversed().index(where: { $0 % 2 != 0 } ) {
    let indexOfLastOddElement = array.index(before: revIndex.base)
    print(indexOfLastOddElement) // 5
}
Run Code Online (Sandbox Code Playgroud)

或者作为单个表达式:

let indexOfLastOddElement =  array.reversed().index(where: { $0 % 2 != 0 } )
    .map { array.index(before: $0.base) }

print(indexOfLastOddElement) // Optional(5)
Run Code Online (Sandbox Code Playgroud)

revIndex.base返回 基础集合中位置之后的位置revIndex,这就是我们必须从索引中"减去"一个的原因.

对于阵列,这可以简化为

    let indexOfLastOddElement = revIndex.base - 1
Run Code Online (Sandbox Code Playgroud)

但对于具有非整数索引(如String)的集合,index(before:)需要上述方法.