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



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

例如,我想要这样的东西(我知道没有叫做lastIndex的函数。这个函数或类似函数是我正在寻找的(:

let array = [1, 2, 3, 4, 5, 3, 6]
let indexOfLastElementEquals3 = array.lastIndex(where: { $0 == 3 })
print(indexOfLastElementEquals3) //5 (Optional)
lastIndex(where:)

和相关方法在 Swift 4.2 中添加, 看

  • SE-0204 添加 last(where:( 和 lastIndex(where:( 方法。

在早期的 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
}

或者作为单个表达式:

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

revIndex.base返回revIndex位置之后的位置 在底层集合中,这就是为什么我们必须"减去"一个 从索引。

对于数组,这可以简化为

let indexOfLastOddElement = revIndex.base - 1

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

最新更新