【问题标题】:Sort array of custom objects by date swift按日期快速排序自定义对象数组
【发布时间】:2015-11-19 06:29:55
【问题描述】:

我有一个自定义对象“会议”,我将所有对象添加到一个数组中。我想要做的是从 Meeting.meetingDate 中对数组进行排序。

我也在使用 Parse,我有两个查询并将结果放入一个数组中。

我可以将数据添加到“meetingData”,但不能对其进行排序。

有人可以帮忙吗?

所以我的数组是:

var meetingsData = [Meeting]()

会议类是:

public class Meeting: PFObject, PFSubclassing
{

  @NSManaged public var meetingTitle: String?
  @NSManaged public var meetingLocation: String?
  @NSManaged public var meetingNotes: String?
  @NSManaged public var meetingDuration: String?
  @NSManaged public var createdBy: User?
  @NSManaged public var meetingTime: NSDate?
  @NSManaged public var meetingDate: NSDate?

}

数组的内容是这样的:

<Meeting: 0x125edd040, objectId: xIqx7MoRd6, localId: (null)> {
createdBy = "<PFUser: 0x125d627c0, objectId: RKCWJRj84O>";
meetingDate = "2015-08-29 17:07:12 +0000";
meetingDuration = "2 hours 2 mins";
meetingLocation = 4th Floor;
meetingNotes = With Investors;
meetingTime = "2015-08-24 09:00:17 +0000";
meetingTitle = Meeting with Investors;
}
<Meeting: 0x125ed95f0, objectId: tz4xx5p9jB, localId: (null)> {
createdBy = "<PFUser: 0x125d627c0, objectId: RKCWJRj84O>";
meetingDate = "2015-08-23 23:00:00 +0000";
meetingDuration = "1 hour";
meetingLocation = "Emirates Stadium, London";
meetingNotes = "Football";
meetingTime = "2000-01-01 20:00:00 +0000";
meetingTitle = "Liverpool V Arsenal";
}
<Meeting: 0x125ed95f0, objectId: tz4xx5p9jB, localId: (null)> {
createdBy = "<PFUser: 0x125d627c0, objectId: RKCWJRj84O>";
meetingDate = "2015-09-23 23:00:00 +0000";
meetingDuration = "1 hour";
meetingLocation = "Library";
meetingNotes = "Dev Team";
meetingTime = "2000-01-01 10:00:00 +0000";
meetingTitle = "Code Review";
}

我尝试过这样做Swift how to sort array of custom objects by property value,但它不起作用

提前致谢

【问题讨论】:

    标签: arrays swift sorting parse-platform nsdate


    【解决方案1】:

    NSDate 不能与&lt; 直接比较。你可以使用NSDatecompare方法,如下代码:

    meetingsData.sort({ $0.meetingDate.compare($1.meetingDate) == .OrderedAscending })
    

    在上面的代码中,您可以使用NSComparisonResult 枚举更改排序顺序,在 Swift 中的实现如下:

    enum NSComparisonResult : Int {
       case OrderedAscending
       case OrderedSame
       case OrderedDescending
    }
    

    希望对你有所帮助。

    【讨论】:

    • 谢谢..我使用sortInPlace 来实现可变性
    【解决方案2】:

    对于 Swift 3

    meetingsData.sort(by: { $0.meetingDate.compare($1.meetingDate) == .orderedAscending})
    

    例如,在 Swift 3 中,日期现在可以直接比较。

       let firstDate = Date()
       let secondDate = Date()
    
       if firstDate < secondDate {    
       } else if firstDate == secondDate {        
       } else if firstDate > secondDate {        
       }
    

    【讨论】:

    • 谢谢,拉姆克里希纳。看起来语法自您发布以来已经更新了一点... meetingData.sorted(by: { $0.meetingDate.compare($1.meetingDate) == .orderedAscending})
    【解决方案3】:

    对于Swift 4、Swift 5

    按时间戳排序

    values.sorted(by: { $0.meetingDateTimestamp > $1. meetingDateTimestamp })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多