在Swift 2中对字典数组进行排序

3
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我已经阅读了许多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"
    ])

这些数据将被放入一个表格视图中,我希望用户能够决定排序方式,可以按照caseNumber或者caseLUD(日期)进行排序。但是我不知道如何通过值来重新排序数组。有什么想法吗?非常感谢您的帮助。


你已经将字典放入了一个数组中,现在只需要对该数组进行排序。Swift 数组有一个 sort 方法,你试过了吗? - Paulw11
1
https://dev59.com/7Ibca4cB1Zd3GeqPUlv6 - Shades
在 Obj-C 中,我做了以下操作: NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"caseLUD" ascending:NO]; NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName]; 但是在 Swift 中我无法理解如何实现。 - FlatDog
1个回答

3

caseNumber 进行排序:

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

请注意,此处使用的 caseNumber 是一个字符串类型,这可能会导致令人惊讶的结果(例如 "12345" < "2")。您可能希望将 caseNumber 存储为整数类型,或在排序时将其转换为整数类型:

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 }

再次感谢,非常有帮助。 - FlatDog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接