iphone - 在未知的 NSMutableArray 深度中搜索值

标签 iphone ios xcode nsmutablearray nsmutabledictionary

好吧,我问错了问题,所以我编辑了原始问题。

我在数组中存储数组,以及 NSDictionaries。它是一种实用型应用程序,没有固定的结构,用户可以根据需要输入嵌套信息。

理想情况下,我需要一种方法来滚动浏览数组的全部内容,给定一个设置参数(一种类,可能是字典键)。这是一个例子..

NSMutableArray *array = [[NSMutableArray alloc]init];

NSMutableDictionary *enteredItem = [[NSMutableDictionary alloc]init];

[enteredItem setObject:@"i'm a title"       forKey:@"title"];
[enteredItem setObject:@"i'm an id"         forKey:@"id"];
[enteredItem setObject:@"i'm a description" forKey:@"description"];
[enteredItem setObject:@"i'm a timestamp"   forKey:@"timestamp"];
[enteredItem setObject:array                forKey:@"items"];


[array addObject:enteredItem];
[array addObject:anotherDictionary];
[array addObject:moreDictionaries];

所以在上面的例子中,我需要找到包含@“i'm an id”的字典(并返回它)。

希望我的问题很清楚。感谢您提供的任何帮助。

最佳答案

递归方法是正确的,但如果您还不知道递归,我不确定代码示例是否有帮助。这是一个可行的解决方案:

添加这些方法:

- (id)findObjectWithKey:(id)key inArray:(NSArray *)array
{
    for (id object in array)
    {
        if ([object isKindOfClass:[NSArray class]])
        {
            return [self findObjectWithKey:key inArray:object];
        }
        else if ([object isKindOfClass:[NSDictionary class]])
        {
            return [self findObjectWithKey:key inDictionary:object];
        }
    }
    return nil;
}

- (id)findObjectWithKey:(id)key inDictionary:(NSDictionary *)dict
{
    for (id subKey in dict)
    {
        id object = [dict objectForKey:subKey];
        if ([subKey isEqual:key])
        {
            return object;
        }
        else if ([object isKindOfClass:[NSArray class]])
        {
            return [self findObjectWithKey:key inArray:object];
        }
        else if ([object isKindOfClass:[NSDictionary class]])
        {
            return [self findObjectWithKey:key inDictionary:object];
        }
    }
    return nil;
}

然后要找到您的对象,只需说:

id object = [self findObjectForKey:@"title" inArray:array];

要修改查找特定对象并返回字典键的方法,请改为:

- (id)findKeyWithObject:(id)key inArray:(NSArray *)array
{
    for (id object in array)
    {
        if ([object isKindOfClass:[NSArray class]])
        {
            return [self findKeyWithObject:key inArray:object];
        }
        else if ([object isKindOfClass:[NSDictionary class]])
        {
            return [self findKeyWithObject:key inDictionary:object];
        }
    }
    return nil;
}

- (id)findKeyWithObject:(id)object inDictionary:(NSDictionary *)dict
{
    for (id key in dict)
    {
        id subObject = [dict objectForKey:key];
        if ([subObject isEqual:object])
        {
            return key;
        }
        else if ([subObject isKindOfClass:[NSArray class]])
        {
            return [self findKeyWithObject:object inArray:object];
        }
        else if ([subObject isKindOfClass:[NSDictionary class]])
        {
            return [self findKeyWithObject:object inDictionary:object];
        }
    }
    return nil;
}

然后要找到您的 key ,只需说:

id key = [self findKeyWithObject:object inArray:array];

关于iphone - 在未知的 NSMutableArray 深度中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017197/

相关文章:

ios - Xcode 5.0.1 iOS 7.0.3 模拟器未启动

xcode - 在 iOS 9 中嵌入 youtube

iphone - 我可以在我的 AppDelegate 中接收摇动事件吗?

iphone - 从 MVC (iOS) 中的异步操作返回结果

ios - iOS7 中的 UIAlertView 在关闭时锁定显示

ios - 如何自定义相机 View 并捕获叠加中的部分?

ios - UINavigationController 透明度?

应用程序购买中的 Xcode 显示错误价格

iphone - 如何、何时、何地在应用程序中使用 NSThread...iPhone

iphone - 制作自定义用户界面