2017-02-24 99 views
-2

我有一个像[[[ ]]]这样的结构,我想将其转换为[]在swift中将嵌套数组转换为单维数组

E.g. [ [ [ "Hi" ] ] ]分成[ "Hi" ]

我该如何在Swift中做到这一点?

+0

您的问题在编辑后不清楚。什么是[[[[params:CVarArg ...]]]?你究竟想要达到什么样的目标? –

+0

这是您对上一个问题的跟进http://stackoverflow.com/q/42428504/1187415?如果是的话,那么你应该这样说。 –

+0

这是同一个问题。只是想明确说明参数类型是CVarArg。最后我试图做到这一点 - 返回NSString(格式:内容,参数:getVaList(params))。但问题是我的参数是[[[]]即将到来,我想将它转换为[] – user1452936

回答

1

以这种方式使用reduce(_:_:)与你的数组。

let array = [[["One","Two","Three"],["Four","Five"]],[["Six"]]] 
let newArray = array.reduce([]) { $0 + $1.reduce([]){ $0 + $1 } } 
print(newArray) //["One", "Two", "Three", "Four", "Five", "Six"] 
3

joined()返回(的懒惰视图)的集合中的元素,级联。这可以反复 更深嵌套集合被应用:

let arr = [ [ [ "A", "B" ], ["C"] ], [ [ "D", "E" ], ["F"] ] ] 

let flattened = Array(arr.joined().joined()) 
print(flattened) // ["A", "B", "C", "D", "E", "F"] 

Array()构造函数建立从所述序列的阵列。 除此之外,没有创建中间数组。

如果你只是想遍历嵌套数组然后加入 序列足以:

for elem in arr.joined().joined() { 
    print(elem) 
} 
0

您可以使用加入成为

let numbers = [[1,2,3],[4],[5,6,7,8,9]] 
let newArray = Array(numbers.joined().joined()) 
print(newArray)//[1,2,3,4,5,6,7,8,9]] 
0

这正是flatMap()的作用:

let arr = [ [ [ "A", "B" ], ["C"] ], [ [ "D", "E" ], ["F"] ] ] 

// each call reduces the array by one dimension 

let flattened = arr.flatMap{$0}.flatMap{$0} 

// returns ["A", "B", "C", "D", "E", "F"]