Iphone 在第二级词典上枚举

Iphone 在第二级词典上枚举,iphone,ios,nested,nsdictionary,enumeration,Iphone,Ios,Nested,Nsdictionary,Enumeration,假设我有一个NSDictionary和一个嵌套的NSDictionary,如下所示(简化后,我有大约10个嵌套字典): 调用[dictionary allKeys]只会给我“key1”和“key2”。有没有什么简单的方法可以像这样循环嵌套字典中的所有键?即使是嵌套函数?递归函数 - (void) findAllKey:(NSDictionary*)dic { for ( NSString *key in [dic allKeys] ) { NSLog(@"%@",

假设我有一个NSDictionary和一个嵌套的NSDictionary,如下所示(简化后,我有大约10个嵌套字典):

调用
[dictionary allKeys]
只会给我“key1”和“key2”。有没有什么简单的方法可以像这样循环嵌套字典中的所有键?即使是嵌套函数?

递归函数

- (void) findAllKey:(NSDictionary*)dic
{
    for ( NSString *key in [dic allKeys] )
    {
        NSLog(@"%@",key);

        if ( [[dic objectForKey:key] isKindOfClass:[NSDictionary class]] )
        {
            [self findAllKey:[dic objectForKey:key]];
        }
    }
}

它的深度优先搜索

希望避免递归,但它似乎是必要的。无论如何,我可能会使用一个稍微修改过的版本(也在调用内部工作,而不是仅仅查找键),但这完美地回答了这个问题。可以使用广度优先搜索来避免递归,这很容易做到
- (void) findAllKey:(NSDictionary*)dic
{
    for ( NSString *key in [dic allKeys] )
    {
        NSLog(@"%@",key);

        if ( [[dic objectForKey:key] isKindOfClass:[NSDictionary class]] )
        {
            [self findAllKey:[dic objectForKey:key]];
        }
    }
}