我尝试做反转数组,请考虑以下几点:
let arrValues : [MyStruct] =
[MyStruct(key: "id-5"),
MyStruct(key: "id-10"),
MyStruct(key: "id-20")]
let reversedKeys = arrValues.map{$0.key ?? ""}.reversed()它应该可以工作,但在日志中,我看到键的顺序与我添加它们的顺序相同。
发布于 2018-08-15 07:22:52
这是一个简单的游乐场测试:
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()
https://stackoverflow.com/questions/47888298
复制相似问题