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

标签 ios arrays swift sorting dictionary

我已经阅读了很多关于 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(日期)来决定排序顺序。但我不知道如何按值重新排序数组。有什么想法吗?感谢所有帮助。

最佳答案

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 }

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

相关文章:

ios - 如何将CCTexture2D添加到CCTextureCache cocos2d中

ios - 未触发 Unwind segue

ios - 是否可以使用 Firebase 云消息传递 (FCM) 直接从设备将 PushNotifications 发送到特殊 UDID?

C# 将字符串 [] 数组与通用对象列表进行比较

ios - Firebase 更新数组值或创建新数组值

ios - 使用 UIStackView 时 UIImageView 被挤压到 UITableViewCell 内

ios - Swift - UIAppearance 类

ios - 在 iOS 应用程序签名期间预填充分发 list 信息

ruby-on-rails - Ruby:NoMethodError:未定义方法 `<<' 为 nil:NilClass

swift - OSX - 从 NSTableView 中删除空单元格