gpt4 book ai didi

swift3 - Swift 3,对字典数组进行排序

转载 作者:行者123 更新时间:2023-12-02 09:37:10 25 4
gpt4 key购买 nike

我在 Swift 3 中对字典数组进行排序时很开心。

在 Swift 2 中,我会这样做,效果很好:

var dicArray = [Dictionary<String, String>()]
let dic1 = ["last": "Smith", "first": "Robert"]
dicArray.append(dic1)
let dic2 = ["last": "Adams", "first": "Bill"]
dicArray.append(dic2)
let sortedArray = dicArray.sort { ($0["last"] as? String) < ($1["last"] as? String) }

将相同的代码转换为 Swift 3 进展并不顺利。系统引导我做到了这一点(通过迂回的路线):

let sortedArray = dicArray.sorted { ($0["last"]! as String) < ($1["last"]! as String) }

但是应用程序总是崩溃,并出现在解包可选值时发现 nil 的错误。

在用头撞 table 太久,将 ?s 和 !s 放入各种可以想象的组合之后,我采用了一种旧方法来完成工作:

let sortedArray = (dicArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "last", ascending: true)]) as! [[String:AnyObject]]

这可行,我正在继续,但它不是很 Swifty,是吗?

哪里出了问题?在这种情况下,如何使纯 Swift 排序函数起作用?

最佳答案

Where did it all go wrong?

第一行出错了:

var dicArray = [Dictionary<String, String>()]

即使在 Swift 2 中,也没有做你想要的事情,因为你实际上是在数组中插入一个额外的空字典。这就是崩溃的根源;空字典没有 "last" 键,因为它是,呃,空的。

你想要这个:

var dicArray = [Dictionary<String, String>]()

看出区别了吗?更改之后,一切就都到位了:

var dicArray = [Dictionary<String, String>]()
let dic1 = ["last": "Smith", "first": "Robert"]
dicArray.append(dic1)
let dic2 = ["last": "Adams", "first": "Bill"]
dicArray.append(dic2)
let sortedArray = dicArray.sorted {$0["last"]! < $1["last"]!}
// [["first": "Bill", "last": "Adams"], ["first": "Robert", "last": "Smith"]]

关于swift3 - Swift 3,对字典数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41404185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com