【问题标题】:How to Sort an Array of NSDictionary using DateTime key (Swift 4)?如何使用 DateTime 键(Swift 4)对 NSDictionary 数组进行排序?
【发布时间】:2018-12-26 07:01:54
【问题描述】:

我有一个 NSDictionary 的 NSArray

let Array = (
{ name = "Auni";
  age = "24";
  transactionTime = "01-02-2011 12:32:39" },
{ name = "Atiqah";
  age = "23";
  transactionTime = "02-02-2013 10:32:41" },
{ name = "Aida";
  age = "22";
  transactionTime = "04-02-2020 18:32:21"})

我如何按最近的 transactionTime 排序这个数组?使用 Swift4。

谢谢。

编辑:让后端人员为您做这件事会更容易。

【问题讨论】:

  • 首先您需要将此数组转换为以事务时间为时间戳的对象数组。然后应用 array.sorted{$0.timestamp > $1.timestamp}
  • Dictionary 转换为模型(可能是struct)。最后,您的Array 将包含许多模型对象。然后,您可以按模型对象中的属性对数组进行排序。并确保您永远不要在 Swift 中使用任何 NS 前缀类型。每个 NS 前缀类型都有一个等效的原生 swift 类型。
  • @nayem 有一些例外情况(例如NSObjectNSAttributedStringNSParagraphStyle)。

标签: arrays swift sorting nsdictionary


【解决方案1】:

你不需要转换成Date对象,dateStrings直接比较也可以。

array.sort { (dict1, dict2) -> Bool in

    /// Considering "transactionTime" key always exists.
    let transactionTime1 = dict1["transactionTime"]!
    let transactionTime2 = dict2["transactionTime"]!

    /// Sort in descending order
    return transactionTime1 > transactionTime2
}

如果您需要对日期对象进行一些计算,那么您还可以在运行时将字符串转换为日期对象,如下例所示:

let df = DateFormatter()
df.dateFormat = "dd-MM-yyyy HH:mm:ss"
array.sort { (dict1, dict2) -> Bool in

    /// Considering "transactionTime" key always exists.
    let transactionTime1 = dict1["transactionTime"]!
    let transactionTime2 = dict2["transactionTime"]!

    let date1 = df.date(from: transactionTime1)!
    let date2 = df.date(from: transactionTime2)!

    /// Sort in descending order
    return date1 > date2
}

print(array)

输出

[["transactionTime": "04-02-2020 18:32:21", "name": "Aida", "age": "22"], ["transactionTime": "02-02-2013 10:32:41”,“姓名”:“Atiqah”,“年龄”:“23”],[“transactionTime”:“01-02-2011 12:32:39”,“姓名”:“Auni”, “年龄”:“24”]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多