FlatMap Arrays(Flattening and mapping arrays)
文章翻译自objc,原文连接:『Flattening and mapping arrays』
在函数式编程中,在数组上map是个很常见的操作。一般情况下,那些需要flatten的数组map的结果是个数组。在很多函数式编程语言中,一般都会有一个操作符来实现flattening、然后mapping的操作。它map一个函数f,然后flatten结果数组到一个单一数组中:
infix operator >>= {}
func >>=<A, B>(xs: [A], f: A -> [B]) -> [B] {
return xs.map(f).reduce([], combine: +)
}
这个操作符最酷的应用场景就是把多个列表进行组合。假设我们有一个列表表示扑克牌的牌码,一个列表表示扑克牌的花色:
let ranks = ["A", "K", "Q", "J", "10",
"9", "8", "7", "6", "5",
"4", "3", "2"]
let suits = ["♠", "♥", "♦", "♣"]
现在,我们就可以通过遍历所以牌码,使其与可能组合的花色进行组合,就生成一个包含所以牌面的列表:
let allCards = ranks >>= { rank in
suits >>= { suit in [(rank, suit)] }
}
// Prints: [(A, ♠), (A, ♥), (A, ♦),
//