2015-12-27 3 views
1

Следующий код выполняет эту работу.Уточнить и развернуть альтернативы в двумерном массиве

var array:[[Int?]] = [[1,2,3,nil],[1,2,3,nil]] 
var flattened = array.flatMap{$0}.flatMap{$0} 
// flattened is of type [Int] 

Но два flatMap один за другим, не делает код легко читаемым, если найти. Как вы напишете это более чистым способом?

+0

Try .map {$ 0} .flatMap {$ 0} –

+0

Это возвращает массив дополнительных опций. –

+0

не будет намного короче или легче понять, чем это, если кто-то знает, что делает flatMap, это лучшее решение - если кто-то этого не делает, он должен его прочитать, поскольку любое другое решение будет одинаково запутанным. – luk2302

ответ

2

flatMap<S : SequenceType>(transform: (Self.Generator.Element) throws -> S) rethrows -> [S.Generator.Element] представляет собой сочетание map() и flatten():

s.flatMap(transform)
эквивалентно
Array(s.map(transform).flatten())

Вы используете flatMap() с "тождественное преобразование" { $0 } конкатенировать массивы; это может быть упрощено с помощью flatten() непосредственно:

let flattened = array.flatten().flatMap { $0 } 
Смежные вопросы