在Swift中有没有对应的Scala、Xtend、Groovy、Ruby等等?
var aofa = [[1,2,3],[4],[5,6,7,8,9]]
aofa.flatten() // shall deliver [1,2,3,4,5,6,7,8,9]
当然我可以用reduce来做,但那有点糟糕
var flattened = aofa.reduce(Int[]()){
a,i in var b : Int[] = a
b.extend(i)
return b
}
快4.倍
flatMap的这种用法并没有被弃用,它就是为此而生的。
https://developer.apple.com/documentation/swift/sequence/2905332-flatmap
var aofa = [[1,2,3],[4],[5,6,7,8,9]]
aofa.flatMap { $0 } //[1,2,3,4,5,6,7,8,9]
快4.倍
flatMap的这种用法并没有被弃用,它就是为此而生的。
https://developer.apple.com/documentation/swift/sequence/2905332-flatmap
var aofa = [[1,2,3],[4],[5,6,7,8,9]]
aofa.flatMap { $0 } //[1,2,3,4,5,6,7,8,9]
在Swift标准库中,为所有符合Sequence协议的类型实现了join函数(或在Swift 3之前在SequenceType上flatten),其中包括Array:
let numbers = [[1,2,3],[4],[5,6,7,8,9]]
let flattened = Array(numbers.joined())
在某些情况下,使用joined()可能是有益的,因为它返回一个惰性集合而不是一个新数组,但当传递给array()初始化器时,总是可以转换为一个数组,就像上面的例子一样。
Swift >= 3.0
减少:
let numbers = [[1,2,3],[4],[5,6,7,8,9]]
let reduced = numbers.reduce([], +)
flatMap:
let numbers = [[1,2,3],[4],[5,6,7,8,9]]
let flattened = numbers.flatMap { $0 }
加入:
let numbers = [[1,2,3],[4],[5,6,7,8,9]]
let joined = Array(numbers.joined())