gpt4 book ai didi

arrays - 将 reversed() 赋给 swift 数组有什么麻烦?

转载 作者:行者123 更新时间:2023-11-28 09:35:53 26 4
gpt4 key购买 nike

我想知道 swift 数组上的 reversed() 方法:

var items = ["a", "b", "c"]

items = items.reversed()

Apple 文档中反向方法的签名说它返回一个

ReversedRandomAccessCollection<Array<Element>>

是否可以在不按照 apple doc 所说的情况下将其分配回项目

For example, to get the reversed version of an array, initialize a new Array instance from the result of this reversed() method.

还是以后会出问题? (因为编译器不会提示)

最佳答案

在 Swift 3 中,数组有 3 个 reversed() 重载:

  1. 将数组视为 RandomAccessCollection,
    func reversed() -> ReversedRandomAccessCollection<Self> (O(1))
  2. 将数组视为双向集合,
    func reversed() -> ReversedCollection<Self> (O(1))
  3. 将数组视为序列,
    func reversed() -> [Self.Iterator.Element] (O(n))

Protocols conformed by Array

默认情况下,reversed()选择 RandomAccessCollection 的重载并返回一个 ReversedRandomAccessCollection。然而,当你写

items = items.reversed()

您强制 RHS 返回可转换为 LHS 的类型 ( [String] )。因此,只会选择返回数组的第三个重载。

重载将复制整个序列(因此 O(n)),因此覆盖原始数组没有问题。


而不是 items = items.reversed() ,它创建数组的副本,将其反转并将其复制回来,您可以使用变异函数达到相同的效果 items.reverse() ,它在不复制数组两次的情况下就地进行还原。

关于arrays - 将 reversed() 赋给 swift 数组有什么麻烦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42688679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com