Я хочу включить это:
let x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
в это:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
очень изящно.
Самый простой способ, конечно,
var y = [Int]()
x.forEach { y.appendContentsOf($0) }
Но это делает результирующий массив изменчивым, что необязательно. Мне это не нравится.
Я попытался использовать reduce
:
let y = x.reduce([Int]()) { (array, ints) -> [Int] in
array.appendContentsOf(ints)
return array
}
Но компилятор жалуется, что array
является неизменным, поэтому я не могу вызвать метод мутации appendContentsOf
.
Следовательно, я добавил некоторые вещи:
let y = x.reduce([Int]()) { (array, ints) -> [Int] in
var newArr = array
newArr.appendContentsOf(ints)
return newArr
}
Это просто плохо. У меня есть инстинкт о том, что это не экономно.
Как я могу сгладить массив более быстро, чем описанные выше методы? Один лайнер был бы хорош.