嵌套的高阶函数

时间:2019-05-15 06:39:43

标签: swift higher-order-functions

我正在努力使用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)
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以使用Dictionary构造函数init(grouping:by:)通过基于给定属性dictionary进行分组,从数组创建category。然后,您可以像这样获得dictioary的值array

categoryDatasource = Array(Dictionary(grouping: datasource) { $0.category }.values)