2016-10-06 19 views
0

在我的應用程序中,我有一個包含'date:NSDate?'之類的幾個屬性的'class:EventObjects'數組。和'stuffToDo:String?'這是從日曆數據庫中提取的。我現在嘗試實現的是將所有EventObjects與「class:EventsAtSameDate」的另一個對象放在一起。在Array中比較對象並將相等的值放入單獨的新對象中

class EventsAtSameDate: NSObject 
{ 
    var date:NSDate? 
    var eventObjects:NSArray<EventObject>? 
} 

最後有一個嵌套數組與EventsAtSameDate。

var nestedArrayOfEventsAtSameDateObjects: Array<EventsAtSameDate>? 

我知道如何搜索和排序與.filter的.sort .sortInPlace等功能的陣列。但我怎麼能比較數組中的日期,並將它們放在另一個嵌套的數組?

回答

2

您可以實例化一個字典,以跟蹤存在的日期,同時對EventObject類型的初始數組執行一次迭代。然後迭代的字典來實例化EventsAtSameDate類並將它們添加到nestedArrayOfEventsAtSameDateObjects: [EventsAtSameDate]

的代碼看起來是這樣的:

var nestedArrayOfEventsAtSameDateObjects = [EventsAtSameDate]() 

//instantiate a dictionary that uses Date as the key and an array of EventObject as the associated value 
var dictionary = [Date: [EventObject]]() 

//iterate through your intial array of EventObjects 
for obj in eObjs { 
    //check if you have already seen the date in the collection 
    if dictionary[obj.date] != nil { 
     //if you have - then append it to that date 
     dictionary[obj.date]?.append(obj) 
     continue 
    } 
    //otherwise, add it to the dictionary for a check later in the loop 
    dictionary[obj.date] = [obj] 
} 


//then iterate through the dictionary 

for (date, eObjs) in dictionary { 
    if eObjs.count > 1 { 
     let sameDate = EventsAtSameDate() 
     sameDate.date = date 
     sameDate.eventObjects = eObjs 
     nestedArrayOfEventsAtSameDateObjects.append(sameDate) 
    } 
} 
1

我將您的活動日期的數組排序,然後在它們之間迭代。檢查日期是否比前一個更新,如果是,則創建另一個存儲。

class Event { 
    var date:Date! 
} 

class EventsList 
{ 
    var date:Date! 
    var events:[Event]! 
} 

func createEventsLists(sortedEvents: [Event]) -> [EventsList] { 
    guard sortedEvents.count > 0 else { return [] } 

    var currentEventList = EventsList() 
    var result = [currentEventList] 
    var lastDate = sortedEvents.first!.date 

    for event in sortedEvents { 
     let newDate = event.date.compare(lastDate!) != .orderedDescending 
     if newDate { 
      currentEventList = EventsList() 
      result.append(currentEventList) 
     } 
     currentEventList.events.append(event) 
     lastDate = event.date 
    } 
    return result 
} 
+0

這也可以工作。在我的情況下,從syllabix字典提示解決了我的問題。謝謝。 – Thoms