Swift - 在 UITableView 中显示自定义 objects 的数组,其中部分按日期排序
Swift - Display array of custom objects with sections sorted by date in UITableView
我有一个充满自定义事件 object 的数组。
每个事件都有一个 NSDate
object。
现在我在一个大的部分中显示每个事件。
但我想要的是所有事件都应该按日期排序,每个日期都应该有自己的部分 header.
将所有 object 分类到不同部分的最佳和最快方法是什么。
我想用 sub-arrays 创建一个主数组。每个 sub-array 都是一个日期,这样我就可以像这样 let section = bigarray[0]
.
访问不同的部分
但这真的是完成这项任务的最好最快的方法吗?
谢谢
首先您可以创建一个 Array<NSDate>
来保存所有日期。然后创建一个 Dictionary<NSDate, Array<Event>>
,在此字典中,您可以将事件分组到相应的数组中。最后使用Array<NSDate>
获取sections,在section中通过查询key可以得到对应的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
}
我有一个充满自定义事件 object 的数组。
每个事件都有一个 NSDate
object。
现在我在一个大的部分中显示每个事件。
但我想要的是所有事件都应该按日期排序,每个日期都应该有自己的部分 header.
将所有 object 分类到不同部分的最佳和最快方法是什么。
我想用 sub-arrays 创建一个主数组。每个 sub-array 都是一个日期,这样我就可以像这样 let section = bigarray[0]
.
但这真的是完成这项任务的最好最快的方法吗? 谢谢
首先您可以创建一个 Array<NSDate>
来保存所有日期。然后创建一个 Dictionary<NSDate, Array<Event>>
,在此字典中,您可以将事件分组到相应的数组中。最后使用Array<NSDate>
获取sections,在section中通过查询key可以得到对应的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
}