我知道Array有append(_:)
方法,但这会改变原始数组。
为什么Array也没有实现appending(_:)
,它会返回一个附加了该元素的新数组?我现在已经实现了几次,但是我想知道它是否有原因尚不存在?
(我唯一的猜测是这与效率有关 - 如果你在一个循环中使用这个方法你会多次复制你的数组?)
答案 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个元素。
为什么文档说?
“否则效率未指明......”
因为在这个例子中我们有一个简单的整数数组,但复制自定义对象数组的行为是不可预测的。