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)
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:)需要上述方法.
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |