0

NSDictionarymy からキー値を指定し、それに関連付けられた値を取得したいと考えています。私はこれを持っています:

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;
    }
)

では、辞書に「world」を指定して「hello」を取得するにはどうすればよいでしょうか。

4

2 に答える 2

2

あなたの質問を正しく理解できれば、「キー」の値を取得するために「コード」=「世界」の辞書を見つけたいと考えています。

データ構造をそのまま維持したい場合は、順次検索を実行する必要があります。その方法の 1 つは次のとおりです。

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 に答える