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

时间:2018-05-10 19:13:24

标签: swift

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

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

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

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

print(indexOfLastElementEquals3) //5 (Optional)

1 个答案:

答案 0 :(得分:7)

在Swift 4.2中添加了

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.baserevIndex的位置后返回位置 在底层集合中,这就是为什么我们必须“减去”一个 来自指数。

对于数组,这可以简化为

    let indexOfLastOddElement = revIndex.base - 1

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