我有2个代码段:
let names = ["Scarlet", "Stan", "Mike", "Walter", "Jessie"]
let reduceStr = names.reduce("", { x, y in
x + y
})
print(reduceStr)
let reduceStrWithFilter = names.filter { (x) -> Bool in
return x.characters.count > 5
}
我很快就会遇到快速语法,我希望将这两个函数组合起来先进行过滤,然后将reduce应用于过滤后的数组。
答案 0 :(得分:1)
比你想象的要容易:
let names = ["Scarlet", "Stan", "Mike", "Walter", "Jessie"]
var bothReducedAndFiltered = names.filter { $0.characters.count > 5 }.reduce("", +)
print(bothReducedAndFiltered)
或者如果你真的想分开2:
var filtered = names.filter { $0.characters.count > 5 }
var reducedAfterFilter = filtered.reduce("", +)
print(reducedAfterFilter)
或更短的解决方案:
var bothReducedAndFiltered = names.filter { $0.characters.count > 5 }.joined()
打印: ScarletWalterJessie
<强>说明:强>
在filter
和reduce
方法中,$0
表示迭代中的当前元素。
希望它有所帮助!