首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift反转数组不起作用

Swift反转数组不起作用
EN

Stack Overflow用户
提问于 2017-12-19 21:40:09
回答 1查看 1.7K关注 0票数 2

我尝试做反转数组,请考虑以下几点:

代码语言:javascript
复制
let arrValues : [MyStruct] = 
            [MyStruct(key: "id-5"),     
             MyStruct(key: "id-10"),
             MyStruct(key: "id-20")]

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

它应该可以工作,但在日志中,我看到键的顺序与我添加它们的顺序相同。

EN

回答 1

Stack Overflow用户

发布于 2018-08-15 07:22:52

这是一个简单的游乐场测试:

代码语言:javascript
复制
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)。但是它必须是一个可变数组,因为它是一个变异函数,所以按照这个例子,你需要这样做:

代码语言:javascript
复制
var mutableCopy = arrValues
mutableCopy.reverse()
let reverseKeys = mutableCopy.map{$0.key ?? ""}
for key in reverseKeys {
    debugPrint(key)
}

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47888298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档