У меня есть массив пользовательских моделей:
struct Event {
var day: Int // let's assume its Int for now
var title: String
}
как:
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")]
Я хочу преобразовать array
в двухмерный массив, каждый массив должен содержать события одного дня; Согласно 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")]
]
Первый массив - во внешнем двумерном массиве - содержит события для дня 1
, а второй - события для дня 2
.
Есть ли способ получить вышеуказанный результат, используя метод reduce(into:_:)
?
Несмотря на то, что я хотел сделать это с помощью reduce(into:_:)
, мне удалось добиться с помощью:
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