我想知道swift数组上的reversed()方法:
var items = ["a", "b", "c"]
items = items.reversed()
来自Apple doc的反向方法的签名表示它返回
ReversedRandomAccessCollection<Array<Element>>
可以将其分配回项目,而无需执行苹果医生所说的
例如,要获取数组的反转版本,请从reverse()方法的结果初始化一个新的Array实例。
或将来会出现问题? (因为编译器没有抱怨)
答案 0 :(得分:7)
Swift 3中的数组有3次reverse()重载:
func reversed() -> ReversedRandomAccessCollection<Self>
(O(1))func reversed() -> ReversedCollection<Self>
(O(1))func reversed() -> [Self.Iterator.Element]
(O(n))默认情况下,reversed()
选择RandomAccessCollection的重载并返回ReversedRandomAccessCollection。但是,当你写
items = items.reversed()
你强迫RHS返回一个可转换为LHS的类型([String]
)。因此,只选择返回数组的第3个重载。
该重载将复制整个序列(因此为O(n)),因此覆盖原始数组没有问题。
而不是创建数组副本的items = items.reversed()
,而是将其反转并将其复制回来,您可以使用变异函数items.reverse()
达到相同的效果,它可以在不进行原点的情况下进行原点恢复复制数组两次。