使用排序函数按 NSDates 对数组进行排序[重复]

Posted

技术标签:

【中文标题】使用排序函数按 NSDates 对数组进行排序[重复]【英文标题】:Sort an array by NSDates using the sort function [duplicate] 【发布时间】:2015-04-27 17:57:54 【问题描述】:

我有一个名为 Event 的模型类。

import Foundation
import MapKit

public class Event 

    let id: Int
    var title: String?
    let status: String
    let location: String
    var description: String?
    var latitude: CLLocationDegrees?
    var longitude: CLLocationDegrees?
    var startDate: NSDate?
    var endDate: NSDate?


    init(id: Int, location: String, status: String) 
        self.id = id
        self.location = location
        self.status = status
    


我从 Web API 获取事件数据作为 JSON 响应。然后我通过解析 JSON 数据创建 Event 对象并将它们放入一个类型化数组 (var events = [Event]())。

private func processEventData(data: JSON) 
    var events = [Event]()

    if let eventsArray = data.array 
        for eventObj in eventsArray 
            let event = Event(
                id: eventObj["id"].int!,
                location: eventObj["location"].string!,
                status: eventObj["status"].string!
            )
            event.title = eventObj["title"].string
            event.description = eventObj["description"].string
            event.latitude = eventObj["lat"].double
            event.longitude = eventObj["lng"].double
            event.startDate = NSDate(string: eventObj["start"].string!)
            event.endDate = NSDate(string: eventObj["end"].string!)

            events.append(event)
        

    

接下来我需要按startDate 属性值对这个数组进行排序。我尝试像这样使用新的 Swift 标准库函数sort 对数组进行排序。

var orderedEvents = events.sort( $0.startDate! < $1.startDate! )

但奇怪的是我收到以下错误。

无法使用类型为“((_, _) -> _)”的参数列表调用“排序”

我不明白为什么我不能这样排序,因为我有一个类型化的数组。

知道我在这里做错了什么吗?

【问题讨论】:

【参考方案1】:

您不能使用&lt; 运算符直接比较日期。从那里,你有几个选择。首先可以使用NSDate的compare函数。

events.sort( $0.date.compare($1.date) == NSComparisonResult.OrderedAscending )

另一种方法是获取日期的.timeIntervalSince1970 属性,这是一个可以直接比较的NSTimeInterval

events.sort( $0.date.timeIntervalSince1970 < $1.date.timeIntervalSince1970 )

【讨论】:

我也对这个晦涩的错误感到困惑。原来这只是意味着闭包内的某种错误,谢谢!

以上是关于使用排序函数按 NSDates 对数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

快速排序NSDates数组[重复]

Swift:按排序描述符对数组进行排序

首先按字母顺序对对象数组进行排序,然后按数字排序

如何使用 Vue.js 2 按日期对数组进行排序

php 数组排序以及按照某个字段排序

按多列对多维数组进行排序