Использование Reduce для конкатенации массива с условием в Swift 4 - PullRequest
0 голосов
/ 27 августа 2018

Я искал способ правильного использования метода класса Array в моем случае, но не смог его найти.Как я могу сократить этот блок кода?

guard let selectedPlanets = self.chart.houses.first(where: {"house_\($0.houseId)" == id})?.planets else { return }

var selectedDestinations: [String] = []
for selectedPlanet in selectedPlanets {
    selectedDestinations += (self.myAspectDestination[selectedPlanet.name] ?? [])
}

1 Ответ

0 голосов
/ 27 августа 2018

Вам нужно first, которое у вас есть.Затем вы можете map этот результирующий массив получить массив массивов.Затем вы можете, наконец, использовать reduce для объединения этих массивов.

let selectedDestinations = self.chart.houses
    .first(where: {"house_\($0.houseId)" == id})?.planets
    .compactMap { self.myAspectDestination[$0.name] }
    .reduce([], +)

Использование compactMap вместо map устраняет необходимость использования ?? []

selecteDestinations будет[String]?.Это будет nil, если first не удастся.Вы можете добавить ?? [] в самый конец, если вам нужен пустой массив, если first не удастся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...