好吧,我问了错误的问题,所以我编辑了原来的问题。
我将数组存储在数组中,以及 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;
}
然后要找到你的钥匙,只需说:
id key = [self findKeyWithObject:object inArray:array];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)