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