扁平阵列的任何

时间:2017-10-15 08:13:28

标签: ios arrays join swift4 flatmap

如何在Swift 4中展平任意数组。的 实施例 假设我有一个数组:var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]并且在展平此数组之后,我的预期结果是[1, 2, 4, 3, 9, 8, 0]。我尝试使用flatMap,但它没有用。

2 个答案:

答案 0 :(得分:1)

像Ray Toal建议的那样(来自https://rosettacode.org/wiki/Flatten_a_list#Swift)做

func flatten<T>(_ s: [Any]) -> [T] {
    var r = [T]()
    for e in s {
        switch e {
        case let a as [Any]:
            r += flatten(a)
        case let x as T:
            r.append(x)
        default:
            assert(false, "value of wrong type")
        }
    }
    return r
}

这个函数的作用如下,它遍历数组中的每个元素,如果它在你的情况下找到Int,它会将它添加到结果中,如果它找到一个[Any]数组,它自己调用(递归调用)并重复进程,直到每个案例都进入最内部的Int。然后在结束时返回结果。请注意,如果您的数组不是asset并且数组Int s(Int

,则会引发[Int]

然后你可以这样做:

var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
array = flatten(array)
//result [1, 2, 4, 3, 9, 8, 0]

答案 1 :(得分:0)

尝试使用Array的reduce和join函数。

var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]

   var flatArray = array.reduce([],+]

else 

   var flatArray = Array(array.joined())