Swift 4 - FlatMap 不展平数组
Swift 4 - FlatMap does not flatten array
我在玩 Swift,但在 flatMap
上遇到了一些麻烦。我看过 this Whosebug 问题,它描述了如何使用 flatMap
展平数组数组,但是当我在操场上重现相同的代码时,它并没有展平数组。如果有人可以提供一些关于这里发生的事情的见解,我将不胜感激。
这是代码和结果的屏幕截图:
flatMap
用于数组的数组;它将内部数组的内容提升为外部数组的内容。那就是 all 它确实如此。它不会神奇地递归。它适用于 [[Element]]
类型的数组,其中 Element 是某种单一类型。
也就是说[[1],[2]]
的平面图是[1,2]
,因为那是数组的数组;它的类型是 [[Int]]
.
但是[1,[2]]
不是数组的数组。它实际上不是 任何东西 的数组;它在 Swift 世界中没有任何意义,其中数组的元素必须全部属于同一类型。所以它只是 Any 的数组(正如您的代码所承认的那样); Swift 甚至 看不到 数组 t1
中的任何数组。所以 flatMap
不适用。
在理想情况下,您的代码甚至无法编译,因为在 Any 数组上使用 flatMap
是非法的。不幸的是,有(或曾经有)另一个 flatMap
,并且编译器放弃了适用于 [[Element]]
的 flatMap
,求助于其他 flatMap
。它适用于任何数组,因此您的代码最终是合法的(但它 still 什么都不做)。参见 Flatten [Any] Array Swift。
我在玩 Swift,但在 flatMap
上遇到了一些麻烦。我看过 this Whosebug 问题,它描述了如何使用 flatMap
展平数组数组,但是当我在操场上重现相同的代码时,它并没有展平数组。如果有人可以提供一些关于这里发生的事情的见解,我将不胜感激。
这是代码和结果的屏幕截图:
flatMap
用于数组的数组;它将内部数组的内容提升为外部数组的内容。那就是 all 它确实如此。它不会神奇地递归。它适用于 [[Element]]
类型的数组,其中 Element 是某种单一类型。
也就是说[[1],[2]]
的平面图是[1,2]
,因为那是数组的数组;它的类型是 [[Int]]
.
但是[1,[2]]
不是数组的数组。它实际上不是 任何东西 的数组;它在 Swift 世界中没有任何意义,其中数组的元素必须全部属于同一类型。所以它只是 Any 的数组(正如您的代码所承认的那样); Swift 甚至 看不到 数组 t1
中的任何数组。所以 flatMap
不适用。
在理想情况下,您的代码甚至无法编译,因为在 Any 数组上使用 flatMap
是非法的。不幸的是,有(或曾经有)另一个 flatMap
,并且编译器放弃了适用于 [[Element]]
的 flatMap
,求助于其他 flatMap
。它适用于任何数组,因此您的代码最终是合法的(但它 still 什么都不做)。参见 Flatten [Any] Array Swift。