繁体   English   中英

在Swift中访问深度嵌套的字典和数组值

[英]Accessing deeply nested dictionary and array values in Swift

我有一组超级嵌套的字典和数组

var lines = [“ set0”:[“ lines”:[“ Line one”,“ Line two”],“ pickone”:[“ set1”:“ Apples”,“ set2”:“ Oranges”]],“ set1 “:[” lines“:[”第一行“,”第二行“],”皮卡“:[” set3“:”香蕉“,” set4“:”葡萄柚“]]

我有两个问题:

  1. 有什么办法可以使这些嵌套词典的结构更易读

  2. 我如何访问嵌套数组的值

例如,在操场上,我正在尝试以下代码:

lines["set0"]!["lines"]

但我什么都没有得到。

关于可读性,请尝试:

var lines = [
    "set0":[
        "lines":[
            "Line one",
            "Line two"
        ],
        "pickone":[
            "set1":"Apples",
            "set2":"Oranges"
        ]
    ],
    "set1":[
        "lines":[
            "Line one",
            "Line two"
        ],
        "pickone":[
            "set3":"Bananas",
            "set4":"Grapefruits"
        ]
    ]
]

至于您的行:

lines["set0"]!["lines"]

我可以确认它正在运行。 也许您应该给操场一些时间来显示结果。 或者,也许您忘记了:

import Foundation

关于您的问题2:在代码稍作更改之后,您可以遍历它的所有分支。

var lines:AnyObject = ["set0":["lines":["Line one","Line two"],"pickone": ["set1":"Apples","set2":"Oranges"]],"set1":["lines":["Line one","Line two"],"pickone":["set3":"Bananas","set4":"Grapefruits"]]]

    NSLog("original object:\(lines)")
    NSLog("all keys array:\(lines.allKeys)")


    if(lines.isKindOfClass(NSDictionary)){
        for key  in lines.allKeys{
            var innerDictionary:AnyObject! = lines.valueForKey(key as! NSString as String)
            //NSLog("inner dictionary:\(innerDictionary)")
            NSLog("depth2 keys array:\(innerDictionary.allKeys)")
            if(innerDictionary.isKindOfClass(NSDictionary)){

                for innerKey  in innerDictionary.allKeys{
                    var innerValue:AnyObject! = innerDictionary.valueForKey(innerKey as! NSString as String)

                    if(innerValue.isKindOfClass(NSDictionary)){
                        NSLog("Depth3 keys array:\(innerValue.allKeys)")
                        var mostInnerDicionary:AnyObject! = innerDictionary.valueForKey(innerKey as! NSString as String)
                        NSLog("most inner Dictionary:\(mostInnerDicionary)")
                        for mostInnerKey  in mostInnerDicionary.allKeys{
                        var mostInnerValue:AnyObject! = mostInnerDicionary.valueForKey(mostInnerKey as! NSString as String)
                            NSLog("most inner Value:\(mostInnerValue)")
                        }

                    }else{
                       NSLog("innerValue:\(innerValue)")
                    }

                }
            }
        }
    }

输出:运行并检查控制台日志中的输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM