我正在努力使用map和filter设置一个更高阶的函数来创建一个包含数组的数组。我现在一直在为每个循环使用困难的方式。 肯定有更好的办法。希望有人可以提供帮助。
我了解诸如datasource.map{$0.category}
之类的简单事物,但仍在努力寻求进一步发展。
var categoryDatasource: [[Kreisel]] = [[Kreisel]]()
// METHODS
convenience init(datasource: [Kreisel]) {
self.init()
var categories = [String: [Kreisel]]()
for kreisel in datasource {
if var val = categories[kreisel.category] {
val.append(kreisel)
categories[kreisel.category] = val
} else {
categories[kreisel.category] = [kreisel]
}
}
categories.forEach { (key, value) in
categoryDatasource.append(value)
}
}
答案 0 :(得分:1)
您可以使用Dictionary
构造函数init(grouping:by:)通过基于给定属性dictionary
进行分组,从数组创建category
。然后,您可以像这样获得dictioary
的值array
categoryDatasource = Array(Dictionary(grouping: datasource) { $0.category }.values)