2014-09-02 60 views
1

在嵌套的NSDictionary結構中獲得所有可能的keyPaths的最好/最優雅的方法是什麼?在字典中獲取所有可能的keyPaths

該結構不是遞歸的,因此字典A不包含對自身的引用,無論是直接還是間接引用。

@{ @"root1" : @{ @"level1_a" : @"someValue" 
       @"level1_b" : @"someOtherValue"} 

    @"root2" : @{ @"level2_a" : @"someValue" 
       @"level2_b" : @"someOtherValue"} 
    } 

應該給@[@"root1.level1_a", @"root1.level1_b", @"root2.level2_a", @"root2.level2_b"]

+1

是'recursion'到答案的廣闊? – JustSid 2014-09-02 01:37:00

+0

好吧,也許這對我來說是一個愚蠢的問題。當然,解決方案涉及遞歸或迭代 – stefreak 2014-09-02 01:38:44

+0

給出一個結構的例子。 – Shinigami 2014-09-02 01:40:04

回答

3

如果你知道結構不包含循環,你可以用一個簡單的算法做遞歸:

-(NSArray*)getAllKeyPaths:(NSDictionary*)dict { 
    NSMutableArray *res = [NSMutableArray array]; 
    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
     if ([obj isKindOfClass:[NSDictionary class]]) { 
      for (NSString *suffix in [self getAllKeyPaths:obj]) { 
       [res addObject:[NSString stringWithFormat:@"%@.%@", key, suffix]]; 
      } 
     } else { 
      [res addObject:key]; 
     } 
    }]; 
    return res; 
} 
+0

不錯,打我吧。 – Mike 2014-09-02 01:55:18

+0

謝謝,很酷的答案=) – stefreak 2014-09-02 01:57:37