Swift反向阵列不工作

问题描述 投票:1回答:1

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

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

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

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

ios arrays swift reverse
1个回答
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"

但是如果你停止执行并调试reverseKeys的内容,它将显示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()

© www.soinside.com 2019 - 2024. All rights reserved.