在字典中获取所有可能的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"]
答
如果你知道结构不包含循环,你可以用一个简单的算法做递归:
-(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;
}
是'recursion'到答案的广阔? – JustSid 2014-09-02 01:37:00
好吧,也许这对我来说是一个愚蠢的问题。当然,解决方案涉及递归或迭代 – stefreak 2014-09-02 01:38:44
给出一个结构的例子。 – Shinigami 2014-09-02 01:40:04