【发布时间】:2019-04-08 22:00:39
【问题描述】:
我有一个自定义模型数组:
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
【问题讨论】:
-
为什么是
reduce(into:_:)?像Array(Dictionary(grouping: array, by: { $0.day }).values)这样的东西应该可以解决问题。 -
是什么让您认为
reduce(into:-:)适合该任务?我的意思是,这真的是一个要求吗? -
你无法使用
reduce(into:_:)Reduce 将数组的所有元素缩减为单个值。 D V 使用dictionary(grouping:)的答案应该可以。 -
@DuncanC 我不同意