How can I flatten an array swiftily in Swift?

前端 未结 3 1339
说谎
说谎 2021-01-17 10:23

I want to turn this:

let x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

into this:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

ver

3条回答
  •  太阳男子
    2021-01-17 11:05

    There's a built-in function for this called joined:

    [[1, 2, 3], [4, 5, 6], [7, 8, 9]].joined()
    

    (Note that this doesn't actually return another Array, it returns a FlattenSequence, but that usually doesn't matter because it's still a sequence that you can use with for loops and whatnot. If you really care, you can use Array(arrayOfArrays.joined()).)


    The flatMap function can also help you out. Its signature is, roughly,

    flatMap(fn: (Generator.Element) -> S) -> [S.Generator.Element]
    

    This means that you can pass a fn which for any element returns a sequence, and it'll combine/concatenate those sequences.

    Since your array's elements are themselves sequences, you can use a function which just returns the element itself ({ x in return x } or equivalently just {$0}):

    [[1, 2, 3], [4, 5, 6], [7, 8, 9]].flatMap{ $0 }
    

提交回复
热议问题