美文网首页Swift
Swift 数组删除元素

Swift 数组删除元素

作者: AlwaysLuckyMa | 来源:发表于2021-03-10 12:54 被阅读0次

    Swift 数组里提供了删除数组元素的方法主要包括以下几种:

    1、@inlinable public mutating func remove(at index: Int) -> Element
    通过索引删除元素,且索引必须是数组有效索引,返回删除所索引元素。

    复杂度为 O(n)
    remove(at index: Int)示例

    var measurements: [Double] = [1.1, 1.5, 2.9, 1.2, 1.5, 1.3, 1.2]
    let removed = measurements.remove(at: 2)
    print(measurements)
    // Prints "[1.1, 1.5, 1.2, 1.5, 1.3, 1.2]"

    @inlinable public mutating func removeAll(keepingCapacity keepCapacity: Bool = false)

    删除数组所有元素
    参数keepCapacity 为true保持当前数组容量,默认值为false。

    复杂度为O(n)

    Swift数组如果要删除某个元素,那么我们有哪些方式呢?

    一个简单的方法是我们通过filter直接过滤掉我们需要生成的元素:

    let ar = [2, 3, 5, 34]
    // 生成新数组
    let ar2 = ar.filter({0 != 2}) print(ar2) // 过滤未包含元素 let ar3 = ar.filter({0 != 7})
    print(ar3)
    但是这种方法会生成一个新的数组,如果我们不想生成一个新的数组,还在原来的数组上操作该怎么做呢?

    一、使用removeAll(where:)
    @inlinable public mutating func removeAll(where shouldBeRemoved: (Element) throws -> Bool) rethrows
    使用这个方法删除数组中的每一个匹配的元素
    复杂度为O(n)
    removeAll(where:)示例:

    删除数组中的奇数

    var numbers = [5, 6, 7, 8, 9, 10, 11]
    numbers.removeAll(where: { $0 % 2 != 0 })
    // numbers == [6, 8, 10]
    删除数组中的某个元素

    var ar = [2, 3, 2, 5, 34]
    ar.removeAll(where: {$0==2})
    // ar = [3, 5, 34]
    二、使用remove(at:)
    思路大概就是找到需要删除数组索引进行删除,在OC里我们可以通过indexOfObject:方法获取索引,在Swift里我们可以通过以下方法获取索引:

    1、index(of:)获取数组里元素出现的第一个索引,但是从Swift5.0开始,这个方法被废弃了。

    @inlinable public func index(of element: Element) -> Int?
    2、firstIndex(of:)在使用firstIndex(of :)查找特定元素的位置。

    @inlinable public func firstIndex(of element: Element) -> Int?
    firstIndex(of:)使用示例:

    var students = ["Ben", "Ivy", "Jordell", "Maxime"]
    if let i = students.firstIndex(of: "Maxime") {
    students[i] = "Max"
    }
    print(students)
    // Prints "["Ben", "Ivy", "Jordell", "Max"]"
    OK,接下来我们来进行对原数组操作进行元素删除:

    var ar = [2, 3, 5, 34]

    // 原数组操作
    // 删除元素 3
    if let index = ar.firstIndex(of: 3) {
    ar.remove(at: index)
    }
    // 测试删除未含元素
    if let index = ar.firstIndex(of: 6) {
    ar.remove(at: index)
    }
    写在最后:
    使用方法一可以把所有需要删除的元素删除,使用方法二可以删除第一个目标元素。当然也可以使用lastIndex(of: )删除最后一个目标元素。

    链接:https://www.jianshu.com/p/1c6da474af89

    相关文章

      网友评论

        本文标题:Swift 数组删除元素

        本文链接:https://www.haomeiwen.com/subject/owrwqltx.html