2012-03-27 12 views
31

To może być podstawowe pytanie, ale nie mogę znaleźć odpowiedzi.Uzyskaj tablicę wartości właściwości każdego obiektu w innej tablicy bez pętli for.

Załóżmy, że mam NSArray (carArray) z obiektami określonego typu (Car).

Czy jest możliwe uzyskanie NSArray (colorArray) z wszystkimi wartościami właściwości (koloru) tych obiektów bez iteracji carArray z pętlą for? (patrz LINQ w .NET)

NSMutableArray *colorList = [[NSMutableArray alloc] initWithCapacity:0]; 

for (Car *car in carArray) 
{ 
    [colorList addObject:car.color]; 
} 

Z góry dziękuję.

Odpowiedz

72

Tak. Zakładając, że Twój obiekt przyjmuje wartość KVC/KVO protocol. Można uzyskać szereg właściwości takich jak:

NSArray *colorList = [carArray valueForKey:@"color"]; 

Właściwie co valueForKey: metoda robi, jest powrót tablicę zawierającą wyniki powołując valueForKey: użyciu kluczową na każdym z obiektów tablicowych. (Z dokumentacji Apple na NSArray)

+0

Patrzyłem na tę metodę w dokumentach, ale nie było dla mnie jasne, co dokładnie zrobiłem. Oczywiście mogłem go wypróbować. –

+0

Należy pamiętać, że użycie niewłaściwego klucza spowoduje awarię w środowisku wykonawczym. Takie podejście nie ma żadnego rodzaju bezpieczeństwa, więc użytkownik nie będzie ostrzeżony przez kompilator o użyciu niewłaściwego klucza. – damirstuhec

-1

Można użyć NSSet uzyskać kolory:

NSSet *NScolors = [NSSet setWithArray:[carArray valueForKey:@"color"]]; 
NSArray *colors = [NScolors allObjects]; 
14

Tak. Możesz to zrobić bez wykonywania iteracji.

NSArray *colorArray = [carArray valueForKeyPath:@"@distinctUnionOfObjects.color"]; 
Powiązane problemy