2016-08-29 11 views
1

カスタムイベントオブジェクトがいっぱいの配列があります。 イベントごとにNSDateオブジェクトがあります。 今はすべてのイベントを1つの大きなセクションに表示します。 しかし、私が望むのは、すべてのイベントを日付順に並べ、各日付に独自のセクションヘッダーを付けることです。Swift - セクションを日付でソートしたカスタムオブジェクトの配列をUITableViewに表示

すべてのオブジェクトをさまざまなセクションに並べ替えるには、どのような方法が最適です。

メインアレイをサブアレイで作成することを考えました。各サブアレイは1つの日付なので、let section = bigarray[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 
} 
+0

Thats works !!!しかし、次の日が上になるように日付を注文することは可能ですか? –

+0

気にしないでください。私はすべてを並べ替える答えを見つけた...ありがとう! –

関連する問題