简体   繁体   English

从另一个NSDictionary中提取一个NSDictionary

[英]Extracting an NSDictionary from within another NSDictionary

My application has an NSDictionary containing many other NSDictionary inside it. 我的应用程序具有一个NSDictionary其中包含许多其他NSDictionary If I print out this dictionary it reads as follows: 如果我打印出此词典,则其内容如下:

oxip =     {
    created = "2014-02-10 14:42:59";
    lastMsgId = "";
    requestTime = "1.6434";
    response =         {
        code = 001;
        debug = "";
        message = success;
        request = getHierarchyByMarketType;
        text = "\n";
        williamhill =             {
            class =                 {
                id = 1;
                maxRepDate = "2014-02-10";
                maxRepTime = "07:31:48";
                name = "UK Football";
                text = "\n";
                type =                     (
                                            {
                        id = 2;
                        lastUpdateDate = "2013-12-26";
                        lastUpdateTime = "13:32:54";
                        market =                             (
                                                            {
                                betTillDate = "2014-02-15";
                                betTillTime = "15:00:00";
                                date = "2014-02-15";
                                id = 140780553;
                                lastUpdateDate = "2014-02-10";
                                lastUpdateTime = "14:09:13";
                                name = "Queen of the South v Dundee - Match Betting";
                                participant =                                     (
                                                                            {
                                        handicap = "";
                                        id = 496658381;
                                        lastUpdateDate = "2014-02-10";
                                        lastUpdateTime = "14:09:13";
                                        name = Dundee;
                                        odds = "11/8";
                                        oddsDecimal = "2.38";
                                        text = "\n\n\n\n\n\n";
                                    },
                                                                            {
                                        handicap = "";
                                        id = 496658380;
                                        lastUpdateDate = "2014-02-10";
                                        lastUpdateTime = "14:09:13";
                                        name = Draw;
                                        odds = "5/2";
                                        oddsDecimal = "3.50";
                                        text = "\n";
                                    },
                                                                            {
                                        handicap = "";
                                        id = 496658379;
                                        lastUpdateDate = "2014-02-10";
                                        lastUpdateTime = "14:09:13";
                                        name = "Queen of the South";
                                        odds = "11/8";
                                        oddsDecimal = "2.38";
                                        text = "\n";
                                    }
                                );
                                text = "\n";
                                time = "15:00:00";
                            }

What is the best possible way for my application to reach the NSDictionary with the name of: 我的应用程序以以下名称到达NSDictionary的最佳方法是:

name = "Queen of the South v Dundee - Match Betting" 名称=“南方女王v邓迪-比赛投注”

without the need of going through each individual dictionary and finding its object for key? 不需要遍历每个单独的词典并找到其键对象?

You can use valueForKeyPath for that. 您可以为此使用valueForKeyPath It accepts a path, separated by dots. 它接受由点分隔的路径。 Example: 例:

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://dl.dropboxusercontent.com/u/1365846/21680479.json"]]
                                                     options:0
                                                       error:nil];
NSLog(@"%@", [dict valueForKeyPath:@"response.williamhill.class.type.market.name"]);

This depends on the representation of dictionary. 这取决于字典的表示形式。 If the williamhill part is changing, then it does not work, of course. 如果williamhill部件在变化,那么它当然不起作用。

There is no way to obtain a reference within a map data type (in this case, an NSDictionary ) without traversing it. 如果没有遍历,就无法在地图数据类型(在本例中为NSDictionary )中获取引用。 Think of the simplified version of this problem: You have a linked list with N elements and you wish to reach the N'th element. 考虑一下此问题的简化版本:您有一个包含N个元素的链表,并且希望到达第N个元素。 Because this is a linked list, you'll have to go through all other N-1 nodes in order to obtain the last reference. 因为这是一个链表,所以您必须遍历所有其他N-1个节点才能获取最后的引用。

An NSDictionary is a hash based data type in which keys and values are stored. NSDictionary是基于哈希的数据类型,其中存储了键和值。 In the case you describe, you have no reference to the nested object (an NSDictionary itself) so you must also traverse all of the dictionaries containing it. 在您描述的情况下,您没有对嵌套对象(NSDictionary本身)的引用,因此您还必须遍历包含该对象的所有字典。

Hope this helps point you in the right direction. 希望这可以帮助您指出正确的方向。

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

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