在Swift 2中对一组字典进行排序(Sorting an array of dictionaries in Swift 2)

编程入门 行业动态 更新时间:2024-10-25 17:23:44
在Swift 2中对一组字典进行排序(Sorting an array of dictionaries in Swift 2)

我读了很多关于SO的文章,我仍然难过! 我有一系列字典,见下文:

var myArray = [[String:AnyObject]]() myArray.append([ "caseNumber" : "12349", "formType" : "Advanced", "caseStatus" : "Approved", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name1" ]) myArray.append([ "caseNumber" : "12345", "formType" : "Standard", "caseStatus" : "On-Hold", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name2" ]) myArray.append([ "caseNumber" : "12342", "formType" : "Normal", "caseStatus" : "Rejected", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name3" ])

这些数据将进入tableView,我希望用户能够通过caseNumber或我的caseLUD (日期)来决定排序顺序。 但我无法弄清楚如何按值重新排序数组。 请问有什么想法吗? 所有帮助赞赏。

I've read many articles on SO and I'm still stumped! I have an array of dictionaries, see below:

var myArray = [[String:AnyObject]]() myArray.append([ "caseNumber" : "12349", "formType" : "Advanced", "caseStatus" : "Approved", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name1" ]) myArray.append([ "caseNumber" : "12345", "formType" : "Standard", "caseStatus" : "On-Hold", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name2" ]) myArray.append([ "caseNumber" : "12342", "formType" : "Normal", "caseStatus" : "Rejected", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name3" ])

This data will go into a tableView and I want the user to be able to decide the sort order, either by caseNumber or my caseLUD (date). But I can't figure out how to re-order the array by values. Any ideas, please? All help appreciated.

最满意答案

按caseNumber排序:

myArray.sortInPlace { ($0["caseNumber"] as! String) < ($1["caseNumber"] as! String) }

注意,这使用caseNumber作为String ,这可能导致令人惊讶的结果(例如"12345" < "2" )。 您可能要么将caseNumber存储为Int ,要么在排序时将其转换为Int :

myArray.sortInPlace { Int($0["caseNumber"] as! String) < Int($1["caseNumber"] as! String) }

按caseLUD排序:

myArray.sortInPlace { ($0["caseLUD"] as! NSDate).compare($1["caseLUD"] as! NSDate) == .OrderedAscending}

.OrderedAscending会先给你最早的日期,而.OrderedDescending会先给你最新的日期。


如果您将数据存储在Struct而不是Dictionary ,则可以避免混乱的类型转换。

struct CaseRecord { var caseNumber: Int var formType: String var caseStatus: String var caseDetails: String var caseLUD: NSDate var friendlyName: String } var myArray = [CaseRecord]() myArray.append(CaseRecord( caseNumber : 12345, formType : "Advanced", caseStatus : "Approved", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name1" ) ) myArray.append(CaseRecord( caseNumber : 124, formType : "Standard", caseStatus : "On-Hold", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name2" ) ) myArray.append(CaseRecord( caseNumber : 13, formType : "Normal", caseStatus : "Rejected", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name3" ) ) myArray.sortInPlace { $0.caseNumber < $1.caseNumber } myArray.sortInPlace { $0.caseLUD.compare($1.caseLUD) == .OrderedDescending }

To sort by caseNumber:

myArray.sortInPlace { ($0["caseNumber"] as! String) < ($1["caseNumber"] as! String) }

Note, this uses caseNumber as a String which could lead to surprising results (for example "12345" < "2"). You might either want to store caseNumber as an Int, or convert it to an Int when sorting:

myArray.sortInPlace { Int($0["caseNumber"] as! String) < Int($1["caseNumber"] as! String) }

To sort by caseLUD:

myArray.sortInPlace { ($0["caseLUD"] as! NSDate).compare($1["caseLUD"] as! NSDate) == .OrderedAscending}

.OrderedAscending will give you earliest date first, and .OrderedDescending will give you latest date first.


If you stored your data in a Struct instead of a Dictionary, you could avoid the messy typecasting.

struct CaseRecord { var caseNumber: Int var formType: String var caseStatus: String var caseDetails: String var caseLUD: NSDate var friendlyName: String } var myArray = [CaseRecord]() myArray.append(CaseRecord( caseNumber : 12345, formType : "Advanced", caseStatus : "Approved", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name1" ) ) myArray.append(CaseRecord( caseNumber : 124, formType : "Standard", caseStatus : "On-Hold", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name2" ) ) myArray.append(CaseRecord( caseNumber : 13, formType : "Normal", caseStatus : "Rejected", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name3" ) ) myArray.sortInPlace { $0.caseNumber < $1.caseNumber } myArray.sortInPlace { $0.caseLUD.compare($1.caseLUD) == .OrderedDescending }

更多推荐

本文发布于:2023-08-04 23:44:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1424188.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中对   字典   Swift   dictionaries   array

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!