我有一个充满自定义Event对象的数组。
每个事件都有一个NSDate
对象。
现在我在一个大部分中显示每个事件。
但我想要的是所有事件都应按日期排序,每个日期都应有自己的节标题。
将所有对象分类到不同部分的最佳和最快方法是什么。
我考虑过创建一个带有子数组的主数组。每个子数组都是一个日期,因此我可以访问不同的部分,如let section = bigarray[0]
。
但这真的是执行此任务的最佳和最快的方法吗? 感谢。
答案 0 :(得分:2)
首先,您可以创建Array<NSDate>
来保存所有日期。然后创建一个Dictionary<NSDate, Array<Event>>
,在此词典中,您可以将事件分组到相应的数组中。最后使用Array<NSDate>
来获取部分,在部分中,您可以通过查询键获得相应的Array<Event>
。
class Event: NSObject {
var date: NSDate?
}
var events: Array<Event> = Array()
for i in 1...100 {
let event: Event = Event()
event.date = NSDate.init(timeIntervalSinceNow: Double(i*86400/2))
events.append(event)
}
var dates: Array<NSDate> = Array()
dates.append(events.first!.date!)
for event in events {
var sameDay: Bool = false
for date in dates {
if NSCalendar.currentCalendar().isDate(date, inSameDayAsDate:event.date!) {
sameDay = true
break
}
}
if !sameDay {
dates.append(event.date!)
}
}
var grouped: Dictionary<NSDate, Array<Event>> = Dictionary()
for date in dates {
var dateEvents: Array<Event> = Array()
for event in events {
if NSCalendar.currentCalendar().isDate(event.date!, inSameDayAsDate: date) {
dateEvents.append(event)
}
}
grouped[date] = dateEvents
}