展平任意数组
Flatten Array of Any
如何展平 Swift 4
中 Any 的数组。 示例:
假设我有一个数组:var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
,在展平这个数组后,我的预期结果是 [1, 2, 4, 3, 9, 8, 0]
。我尝试使用 flatMap
但它没有用。
尝试使用Array的reduce和join函数
var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
var flatArray = array.reduce([],+]
else
var flatArray = Array(array.joined())
像 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。最后返回结果。请注意,如果您的数组不是 Int
和 Int
数组 ([Int]
)
,则会抛出 asset
那么你可以这样做:
var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
array = flatten(array)
//result [1, 2, 4, 3, 9, 8, 0]
如何展平 Swift 4
中 Any 的数组。 示例:
假设我有一个数组:var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
,在展平这个数组后,我的预期结果是 [1, 2, 4, 3, 9, 8, 0]
。我尝试使用 flatMap
但它没有用。
尝试使用Array的reduce和join函数
var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
var flatArray = array.reduce([],+]
else
var flatArray = Array(array.joined())
像 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。最后返回结果。请注意,如果您的数组不是 Int
和 Int
数组 ([Int]
)
asset
那么你可以这样做:
var array:[Any] = [1, 2, [4, 3], [9, [8, 0]]]
array = flatten(array)
//result [1, 2, 4, 3, 9, 8, 0]