Swift添加到数组的末尾

时间:2017-02-01 10:45:48

标签: swift

我知道Array有append(_:)方法,但这会改变原始数组。

为什么Array也没有实现appending(_:),它会返回一个附加了该元素的新数组?我现在已经实现了几次,但是我想知道它是否有原因尚不存在?

(我唯一的猜测是这与效率有关 - 如果你在一个循环中使用这个方法你会多次复制你的数组?)

2 个答案:

答案 0 :(得分:0)

您可以对此执行扩展:

extension Array{
    func appending(_ element:Element) -> Array<Element>{
        var result = self
        result.append(element)
        return result
    }
}

答案 1 :(得分:0)

我们在讨论什么?

从'append'文档开始:

/// Append `newElement` to the Array.
///
/// - Complexity: Amortized O(1) unless `self`'s storage is shared with another live array; O(`count`) if `self` does not wrap a bridged
     

NSArray;否则效率未指定..       public mutating func append(newElement:Element)

您需要了解指针和智能指针。

M 元素

var a = [1, 2, 3] 

是一个简单的数组。

如果您附加 N 元素,则复杂性将为 O(N)

func addElements() {
    for elment in [4, 5, 6] {
        a.append(element)
    }
}

如果您从 a

开始创建新阵列
var b = a

在运行时 b 指向 a ,因此如果再次执行addElements,复杂性将为 O(M)要复制原始数组加 O(N)以添加N个元素。

为什么文档说?

  

“否则效率未指明......”

因为在这个例子中我们有一个简单的整数数组,但复制自定义对象数组的行为是不可预测的。