我有一个类似的数组:
let responseArray : [[String : Any]] = [["id": 1, "sub_array": [["id": 2, "sub_array": [["id": 3], ["id": 4]]],["id": 5, "sub_array": [["id": 6], ["id": 7]]]]], ["id": 8, "sub_array": [["id": 9], ["id": 10]]]]
print(responseArray as! NSArray)
我希望将其合并到UITableView
期待结果如:
let expectedOutput : [[String : Any]] = [["id" : 1], ["id" : 2], ["id" : 3], ["id" : 4], ["id" : 5], ["id" : 6], ["id" : 7], ["id" : 8], ["id" : 9], ["id" : 10]]
print(expectedOutput as! NSArray)
我可以通过使用循环来实现它,但是如何在不使用循环的情况下实现它?
答案 0 :(得分:0)
在没有明确使用flatten
循环的情况下为这个数据结构编写for a in b
函数当然是可能的,但考虑到数据的性质,循环和递归调用是恕我直言不可避免的。 / p>
func flatten(_ array: [[String: Any]]) -> [[String: Any]] {
var result = [[String: Any]]()
array.forEach { dict in
dict.forEach { (key, val) in
if let v = val as? [[String: Any]] {
result.append(contentsOf: flatten(v))
} else {
result.append([key: val])
}
}
}
return result
}
答案 1 :(得分:0)
是 , 您可以 。 Swift CollectionTypes(数组,词典,集合)有一个强大的好的方法,提供许多替代解决方案 in comparison for-loop 。
这是: -
我们将执行 3 任务,如下所示:
第三个也是最后一个,我们将获取 sub_array内部sub_array 的部分 ID 。
let responseArray : [[String : Any]] = [["id": 1, "sub_array": [["id": 2, "sub_array": [["id": 3], ["id": 4]]],["id": 5, "sub_array": [["id": 6], ["id": 7]]]]], ["id": 8, "sub_array": [["id": 9], ["id": 10]]]]
let arrExrernalIds = responseArray.flatMap({$0["id"] as? Int ?? 0})
print(arrExrernalIds) // output :- [1, 8]
let arrSub_ArrayIDs = responseArray.flatMap({$0["sub_array"] as? [[String:Any]] ?? []}).flatMap({$0["id"] as? Int ?? 0})
print(arrSub_ArrayIDs) // output :- [2, 5, 9, 10]
let arrSubArray_SubArrayIDs = responseArray.flatMap({$0["sub_array"] as? [[String:Any]] ?? []}).flatMap({$0["sub_array"] as? [[String:Any]] ?? []}).flatMap({$0["id"] as? Int ?? 0})
print(arrSubArray_SubArrayIDs) // output :- [3, 4, 6, 7]
var allIDs = (arrExrernalIds + arrSub_ArrayIDs + arrSubArray_SubArrayIDs).sorted()
print(allIDs) // output :- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var expectedOutput = [[String:Any]]()
for id in allIDs {
expectedOutput.append(["id":id])
}
print(expectedOutput) // output :- [["id": 1], ["id": 2], ["id": 3], ["id": 4], ["id": 5], ["id": 6], ["id": 7], ["id": 8], ["id": 9], ["id": 10]]
只有4行代码,您可以获得所需的数组。