Swift 4 - FlatMap не выравнивает массив - PullRequest
0 голосов
/ 30 сентября 2018

Я играю со Swift и у меня возникли проблемы с flatMap.Я видел этот вопрос StackOverflow, который описывает, как сгладить массив массивов с помощью flatMap, но когда я воспроизводил тот же код на игровой площадке, он не сглаживает массив.Я был бы признателен, если бы кто-то мог дать некоторое представление о том, что здесь происходит

Вот скриншот кода и результата: enter image description here

1 Ответ

0 голосов
/ 30 сентября 2018

flatMap для массива массивов;он продвигает содержимое внутренних массивов в содержимое внешнего массива.И это все это делает.Это не волшебно рекурсивно.Он работает с массивом типа [[Element]], где Element - какой-то один тип.

Другими словами, плоская карта [[1],[2]] равна [1,2], потому что это массив массивов;его тип [[Int]].

Но [1,[2]] - это , а не массив массивов.На самом деле это не массив ничего ;это не имеет смысла в мире Swift, где все элементы массива должны быть одного типа.Так что это просто массив Any (как признает ваш код);Swift даже не видит никаких массивов внутри вашего массива t1.Так что flatMap не применяется.

В идеальном мире ваш код даже не скомпилируется, потому что flatMap, используемый в массиве Any, недопустим.К сожалению, есть (или был) другой flatMap, и компилятор, отказавшись от flatMap, который применяется к [[Element]], прибегает к другим flatMap.Это применимо к любому массиву, так что ваш код становится легальным (но он все же ничего не делает).См. Свести [Любой] Array Swift .

...