我尝试制作反转阵列,请考虑以下内容:
let arrValues : [MyStruct] =
[MyStruct(key: "id-5"),
MyStruct(key: "id-10"),
MyStruct(key: "id-20")]
let reversedKeys = arrValues.map{$0.key ?? ""}.reversed()
它假设工作,但在日志中我看到按照相同顺序的键我添加了它们。
答案 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()