iphone – 在未知的NSMutableArray深度中搜索值
发布时间:2020-12-14 17:49:24 所属栏目:百科 来源:网络整理
导读:好吧,我问了一个错误的问题,所以我编辑了原来的问题. 我在数组中存储数组,以及NSDictionaries.它是一种实用类型的应用程序,没有设置结构,用户可以根据需要输入嵌套信息. 理想情况下,我需要一个方法来给定一个set参数(一种类,可能是一个字典键)滚动我的数组的
好吧,我问了一个错误的问题,所以我编辑了原来的问题.
我在数组中存储数组,以及NSDictionaries.它是一种实用类型的应用程序,没有设置结构,用户可以根据需要输入嵌套信息. 理想情况下,我需要一个方法来给定一个set参数(一种类,可能是一个字典键)滚动我的数组的整个内容.这是一个例子.. 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]; 所以在上面的例子中,我需要找到包含@“我是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; } 然后找到你的钥匙,只需说: id key = [self findKeyWithObject:object inArray:array]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |