![](/img/trans.png)
[英]How to refer to an object in a NSDictionary that is in a NSArray
[英]Searching for an object in an unknown NSDictionary/NSArray depth
我已經問過一個類似的問題,但這有點不同,所以我認為最好再問一個問題。
我將數組以及NSDictionaries存儲在數組中。 它是一種實用程序,沒有設置結構,用戶可以根據需要輸入嵌套信息。
我需要一個方法,該方法可以滾動瀏覽Array / Dictionary的全部內容,並根據我發送的值返回特定的字典。 這是一個例子。
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”的字典。
我問的類似問題位於此處。 在未知的NSMutableArray深度中搜索值 -我在返回字典以及比較對象時遇到麻煩。
希望我的問題很清楚。 謝謝你的盡心幫助。
從答案繼續,您需要做一些修改:
- (id)findDictionaryWithValue:(id)value inArray:(NSArray *)array
{
__block id match = nil;
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[NSArray class])
{
match = [self findDictionaryWithValue:value inArray:obj];
}
else if ([obj isKindOfClass:[NSDictionary class])
{
match = [self findDictionaryWithValue:value inDictionary:obj];
}
*stop = (match!=nil);
}];
return match;
}
- (id)findDictionaryWithValue:(id)value inDictionary:(NSDictionary *)dict;
{
__block id match = nil;
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if([obj isEqual:value]) {
match = dict;
}
else if ([obj isKindOfClass:[NSArray class])
{
match = [self findDictionaryWithValue:value inArray:obj];
}
else if ([obj isKindOfClass:[NSDictionary class])
{
match = [self findDictionaryWithValue:value inDictionary:obj];
}
*stop = (match!=nil);
}];
return match;
}
NSDictionary *resultDict = [self findDictionaryForValue:@"i'm an id" inArray:array];
但是,您必須小心遞歸。 如果有任何循環路徑,您將得到一個無限循環(崩潰前堆棧溢出)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.