ti-enxame.com

Como posso obter todos os valores de chave específica de cada NSDictionary em um NSArray?

Eu tenho uma matriz que contém objetos de dicionário. Em cada dicionário, as chaves são comuns. Agora eu quero obter todos os valores dessa chave. Eu tenho esses valores com iteração, mas estou procurando alguma maneira direta ou um método padrão que faça esse trabalho.

Você pode me ajudar a obter um método padrão que serve a esse propósito? Obrigado.

Estrutura de dados é assim:

<array>
    <dict>
        <key>Match</key>
        <string>Football</string>
        <key>Stadium</key>
        <string>XXXXX</string>
    </dict>
    <dict>
        <key>Match</key>
        <string>HOCKY</string>
        <key>Stadium</key>
        <string>XXXXX</string>
    </dict>
 </array>

Estou fazendo isso agora:

NSMutableArray * matches = [[NSMutableArray alloc] init];
        for (int i = 0; i< myArray.count; i++){
            [matches insertObject:[[myArray objectAtIndex:i] objectForKey:@"Match"] atIndex:i];
        }
        [matchDataArray addObjectsFromArray:matches];

Isso me dá uma resposta correta. Mas não quero fazer essa iteração. Eu quero um método que retorne todos os valores da chave "Match" de todos os índices da matriz e salve em outra matriz de uma só vez. A matriz recém-criada terá apenas os valores da chave Match de todos os índices da matriz.

Isso é possível??

24
hgpl

Há um truque interessante com a codificação de valores-chave que faz isso:

NSArray *matches = [myArray valueForKey: @"Match"];

Aqui está um exemplo em ação:

NSArray *anArray = @[
                      @{@"aWord" : @"I"},
                      @{@"aWord" : @"have"},
                      @{@"aWord" : @"an"},
                      @{@"aWord" : @"array"},
                      @{@"aWord" : @"which"},
                      @{@"aWord" : @"contains"},
                      @{@"aWord" : @"dictionary"},
                      @{@"aWord" : @"objects."},
                      @{@"aWord" : @"Etc."},
                      ];

NSArray *aWordArray = [anArray valueForKey:@"aWord"];

Após esta última linha, aWordArray conterá as palavras na mesma ordem que na matriz original de dicionários.

67
Monolo