Вложенные функции высшего порядка - PullRequest
1 голос
/ 15 мая 2019

Я изо всех сил пытаюсь установить функцию более высокого порядка, используя карту и фильтр, чтобы создать массив, который содержит массивы. Я делал это сейчас трудным путем, используя для каждого цикла. Должен быть лучший способ. надеюсь, кто-то может помочь.

Я знаю о таких простых вещах, как 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 Ответ

1 голос
/ 15 мая 2019

Вы можете использовать Dictionary конструктор init (группировка: по:) , чтобы создать dictionary из массива путем группировки на основе заданного свойства category.Тогда вы можете получить значения dictioary как array, например:

categoryDatasource = Array(Dictionary(grouping: datasource) { $0.category }.values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...