2013-02-22 14 views
22

Mam tablicę zawierającą obiekty słownika. W każdym słowniku klucz jest wspólny. Teraz chcę uzyskać wszystkie wartości tego klucza. Mam te wartości z iteracją, ale szukam prostej metody lub domyślnej metody, która wykonuje to zadanie.Jak mogę uzyskać wszystkie wartości dla określonego klucza z każdego NSDictionary w NSArray?

Czy możesz mi pomóc uzyskać jedną domyślną metodę, która służy celowi? Dzięki.

Struktura danych jest tak:

<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> 

Robię to teraz:

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]; 

Daje mi poprawną odpowiedź. Ale nie chcę wykonywać tej iteracji. Chcę metodę, która zwróci mi wszystkie wartości "Dopasuj" klucz ze wszystkich indeksów tablicy i zapisać w innej tablicy na raz. nowo utworzona tablica będzie zawierała tylko wartości klucza dopasowania ze wszystkich indeksów tablicy.

Czy to możliwe?

Odpowiedz

65

Jest schludny sztuczka z kodowaniem klucz-wartość, która czyni go:

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

Oto przykład w akcji:

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"]; 

Po tej ostatniej linii, aWordArray będzie zawierać słowa w takiej samej kolejności, jak w oryginalnej tablicy słowników.

+1

Wielkie dzięki. To działa. Ułatwia mi to życie. Dzięki jeszcze raz. :) – hgpl

+0

jest jakikolwiek sposób filtrowania według wartości –

+0

Boosa - Użyj predykatu i zwróć przefiltrowaną tablicę - – PruitIgoe

Powiązane problemy