在字典中获取所有可能的keyPaths

问题描述:

在嵌套的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

如果你知道结构不包含循环,你可以用一个简单的算法做递归:

-(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