0

我想从 my 中给出一个键值NSDictionary并获取与之关联的值。我有这个:

NSArray *plistContent = [NSArray arrayWithContentsOfURL:file];
NSLog(@"array::%@", plistContent);

dict = [plistContent objectAtIndex:indexPath.row];

cell.textLabel.text = [dict objectForKey:@"code"];

plistContent

(
        {
        code = world;
        key = hello;
    },
        {
        code = 456;
        key = 123;
    },
        {
        code = 1;
        key = yes;
    }
)

那么我如何通过给字典“世界”来获得“你好”呢?

4

2 回答 2

2

如果我正确理解您的问题,您希望找到“code”=“world”的字典,以便获取“key”的值。

如果要保持数据结构不变,则必须执行顺序搜索,一种方法很简单:

NSString *keyValue = nil;
NSString *searchCode = @"world";
for (NSDictionary *dict in plistContents) {
    if ([[dict objectForKey:@"code"] isEqualToString:searchCode]) {
        keyValue = [dict objectForKey:@"key"]);    // found it!
        break;
    }
}

但是,如果您进行大量此类搜索,那么您最好重新组织数据结构,使其成为字典字典,键入“代码”值,将其转换如下:

NSMutableDictionary *dictOfDicts = [[NSMutableDictionary alloc] init];
for (NSDictionary *dict in plistContents) {
    [dictOfDicts setObject:dict
                    forKey:[dict objectForKey:@"code"]];
}

(请注意,如果其中一个字典不包含“代码”条目,则代码将中断)。

然后查找很简单:

NSDictionary *dict = [dictOfDicts objectForKey:@"world"]);

这将是“死的快”。

于 2013-10-10T15:23:39.917 回答
0
- (NSString*) findValueByCode:(NSString*) code inArray:(NSArray*) arr
{   
    for(NSDictonary* dict in arr)
    {
        if([[dict valueForKey:@"code"] isEqualToString:code])
        {
             return [dict valueForKey:@"key"]
        }
    }

    return nil;
}
于 2013-10-10T15:23:50.653 回答