let stringArray = ["a","2","b","1","3"]
// nilを新しい配列に加えない
let intArray = stringArray.flatMap{ Int($0) }
//=> [2, 1, 3]
// .mapの場合(nilが入り、値もOptional)
let someArray = stringArray.map{ Int($0) }
//=> [nil, {Some 2}, nil, {Some 1}, {Some 3}]
// 同じ結果するには...
let someArray = stringArray.map{ Int($0) }.filter{ $0 != nil }.map{ $0! }
//=> [2, 1, 3]
// 3次元配列 => 2次元配列
var multidimensionalArray: [[[Int]]] = [[[1,2],[3,4,5]],[[6,7]],[[8],[9,10]]]
//=> [[[1, 2], [3, 4, 5]], [[6, 7]], [[8], [9, 10]]]
let array = multidimensionalArray.flatMap { $0 }
//=> [[1, 2], [3, 4, 5], [6, 7], [8], [9, 10]]
// -------------------------
// 2次元配列 => 1次元配列
var multidimensionalArray: [[Int]] = [[1,2,3],[4,5,6],[7,8,9]]
//=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let array = multidimensionalArray.flatMap { $0 }
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]