我一直在寻找一种方法来正确使用Array
类的 reduce 方法,但是找不到它。如何缩短这段代码?
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] ?? [])
}
答案 0 :(得分:0)
您需要拥有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
。