Swift反向阵列不工作

时间:2017-12-19 13:40:09

标签: ios arrays swift reverse

我尝试制作反转阵列,请考虑以下内容:

let arrValues : [MyStruct] = 
            [MyStruct(key: "id-5"),     
             MyStruct(key: "id-10"),
             MyStruct(key: "id-20")]

let reversedKeys = arrValues.map{$0.key ?? ""}.reversed()

它假设工作,但在日志中我看到按照相同顺序的键我添加了它们。

1 个答案:

答案 0 :(得分:2)

这是对操场的简单测试:

import UIKit

struct MyStruct {
    var key: String?
}

let arrValues : [MyStruct] = [MyStruct(key: "id-5"), MyStruct(key: "id-10"), MyStruct(key: "id-20")]

let reversedKeys = arrValues.map{$0.key ?? ""}.reversed()
for key in reversedKeys {
    debugPrint(key)
}

debugPrint将正确显示:"id-20" "id-10" "id-5"

但是,如果您停止执行并调试reversedKeys的内容,它将显示id-5 id-10 id-20

有两个功能reverse()reversed()

reversed()实际上并没有对数组重新排序。它只是返回一个对象(如迭代器),该对象从头到尾迭代元素。它的复杂度为O(1)。

但是reverse()更改元素的顺序,即O(n)的复杂度。但这必须是可变数组,因为它是一个变异函数,因此在该示例之后,您将需要执行以下操作:

var mutableCopy = arrValues
mutableCopy.reverse()
let reverseKeys = mutableCopy.map{$0.key ?? ""}
for key in reverseKeys {
    debugPrint(key)
}

如果只需要使用reversed()来迭代密钥,但是如果必须使用reverseKeys[2]这样的下标来访问密钥,则应该使用reverse()