0

I have class:

class DisplayTime {

    var time: Schedules

    init (time: Schedules){
        self.time = time

    }
}

Schedules - class with next properties:

class Schedules: Object {
    dynamic var hour = 0
    dynamic var minute = 0
    dynamic var groupIndex = 0

}

So, I'd like to get Dictionary, where key - hour, and value - array of Schedules - var dictTime: [Int:[Schedules]]

I try, but unsuccessfully:

func groupBy() -> [Int:[Schedules]]{

        let displayTime = self.displayTimes

        var dictTime: [Int:[Schedules]] = [:]


        for i in 0..<displayTime.count {

            dictTime[displayTime[i].time.hour] = [displayTime[i].time]
        }

       print (dictTime)

      return dictTime

    }

I understand - that function created only [key:[one_value]], but I may have several values for one key, how to handle that variant? (if key_now repeat key_before -> add to array Schedules for key_now to key_before.

Vadim Nikolaev
  • 2,132
  • 17
  • 34

1 Answers1

2

Using the categorise(_:) method from the extension shown in this answer, you can simply say:

let dictTime = displayTimes.lazy.map{$0.time}.categorise{$0.hour}

map(_:) is used in order to iterate over the time of each DisplayTime and lazy is used in order to prevent the creation of an intermediate array.

Community
  • 1
  • 1
Hamish
  • 78,605
  • 19
  • 187
  • 280