我从网页解析评论,我得到一个嵌套数组 字典。因此,数据具有典型的嵌套注释结构。他们中的一些人有答案,其中一些没有答案。一些答案也有评论。就像在计划中一样:
comment1
comment1
comment2
comment2
comment3
comment4
comment5
comment4
comment2
comment1
comment1
comment2
comment1
我知道如何使用for ... in语句迭代2或3级嵌套,但是当嵌套级别的数量未知时我不知道怎么做。
基本上,我需要计算所有嵌套dict的更高级别(方案中的comment1,第二个comment1,它将是7)并在每个级别解析后删除“错误”字典。 请帮忙。
答案 0 :(得分:3)
你可以递归地做到这一点。像这样:
func recursivelyAddComments(commentData: [String: AnyObject]) -> Comment {
//Init with the standard data for comment
let comment = Comment()
//recursivly add nested comments, calling the property with the nested array for "answers"
if let answersData = commentData["answers"] as? [String:AnyObject]{
for answerData in answersData {
if let answer = recursivelyAddComments(answerData){
comment.answers.append(answer)
}
}
}
return comment
}
首先,该函数从相关数据创建注释,然后通过调用自己的数据来解析包含答案注释的数组中的每个项目。
答案 1 :(得分:0)
您可以查看下面的伪代码。它应该为您提供使用堆栈来完成任务的一般想法
let dict = [String: AnyObject]()
let stack: Array<AnyObject>
stack.append(dict)
while stack.count != 0 {
let comment = stack.popLast() as? [String: AnyObject]
if value == nil {
comment = currDict[i] as! MyObject
print("value: \(comment)")
// Do other stuff
}
for item in comment.allValues() {
stack.append(item)
}
}
}