I have an array of custom model:
struct Event {
var day: Int // let's assume its Int for now
var title: String
}
as:
let array = [Event(day: 1, title: "Pizza Party!"),
Event(day: 1, title: "Another Pizza Party"),
Event(day: 2, title: "Cinema - Moive 01"),
Event(day: 2, title: "Cinema - Moive 02")]
I want to transform array
to be a 2 dimensional array, each array should contains events that have the same day; According to array
, the result should be:
[
[Event(day: 1, title: "Pizza Party!"), Event(day: 1, title: "Another Pizza Party")]
[Event(day: 2, title: "Cinema - Moive 01"), Event(day: 2, title: "Cinema - Moive 02")]
]
The first array -in the outer 2d array- contains events for day 1
and the second one contains events for day 2
.
Is there a way to get the above result using the reduce(into:_:)
method?
Despite of wanting to do it using reduce(into:_:)
, I was able to achieve by implementing:
func transfrom(_ models: [Event]) -> [[Event]] {
let uniqueDates = Set(array.map { $0.day }).sorted()
var twoDArray = [[Event]]()
for date in uniqueDates {
var array = [Event]()
for model in models {
if date == model.day {
array.append(model)
}
}
twoDArray.append(array)
}
return twoDArray
}
let transfomredArray = transfrom(array) // wanted result