繁体   English   中英

在Swift 3中对包含日期的字符串数组进行排序?

[英]Sorting a tuple array of Strings that contains a date in Swift 3?

我目前有一个元组数组,其第一个值是String类型,第二个值是Double类型。 第一个值包含日期,格式为"MM/dd/yy"

由于我的代码存在冲突,我没有使用Date对象。

由于MM原因,我无法按字符串降序排列此数组(从最近到最旧)。

例如,我的数组包含以下内容:

[("07/30/17", 5.0), ("08/30/17", 9.0), ("05/30/17", 5.0), ("05/28/17", 6.0)]

调用tupleArray = tupleArray.sort( {$0.0 > $1.0} )会产生以下结果:

[("08/30/17", 9.0), ("07/30/17", 5.0), ("05/30/17", 5.0), ("05/28/17", 6.0)]

这按预期工作。

但是,如果我添加一个String条目"08/30/16" ,调用相同的排序函数会产生以下结果:

[("08/30/17", 9.0), ("08/30/16", 30.0), ("07/30/17", 5.0), ("05/30/17", 5.0), ("05/28/17", 6.0)]

"08/30/16"在第二个指数中应该是最后一个指数,因为第16 17年更早。

我看过:

  1. (Swift 3)试图在swift 3中按Date排序一个类对象数组?

  2. 按日期排序数组中的对象

我究竟做错了什么?

谢谢!

import Foundation

var tupleArray = [("08/30/17", 9.0), ("08/30/16", 30.0), ("07/30/17", 5.0), ("05/30/17", 5.0), ("05/28/17", 6.0)]

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yy"

tupleArray = tupleArray.sorted { 
    guard let date1 = dateFormatter.date(from:$0.0), let date2 = dateFormatter.date(from:$1.0) else { return false}
    return date1 > date2
}

print(tupleArray)

我建议你创建一个将StringDouble作为属性的Object 并且您可以将Data作为计算属性创建,该属性将在String值上计算。 并使用Date computed属性进行排序。

我相信这将使您的生活更轻松,并将代码从元组重新编写为对象。 稍后在排序字符串时很难找到错误。我确定你的第一个案例是数组中有3个元组只是巧合,它以正确的方式排序(这是猜测) ..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM