如何在swift中迭代具有未知数量的嵌套级别的嵌套字典?

时间:2015-11-04 15:57:53

标签: ios arrays swift dictionary

我从网页解析评论,我得到一个嵌套数组  字典。因此,数据具有典型的嵌套注释结构。他们中的一些人有答案,其中一些没有答案。一些答案也有评论。就像在计划中一样:

comment1
comment1
   comment2
   comment2
     comment3
       comment4
         comment5
       comment4
   comment2
comment1
comment1
   comment2
comment1

我知道如何使用for ... in语句迭代2或3级嵌套,但是当嵌套级别的数量未知时我不知道怎么做。

基本上,我需要计算所有嵌套dict的更高级别(方案中的comment1,第二个comment1,它将是7)并在每个级别解析后删除“错误”字典。 请帮忙。

更新 作为iOS开发中的新手,我将我的dict结构显示为图片。对不起,但我不知道如何从Debag区域复制格式 dict

2 个答案:

答案 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)
        }
    }
}