9

'dan tek bir öznitelik NSArray alma Çok düzenli bir senaryo ile karşı karşıyayım.NSArray

Özel türde bir nesneyi olan bir NSArray sahibiyim, Kişi. Kişi sınıfının öznitelikleri vardır: firstName, lastName ve age.

NSArray öğesinden, Kişi nesnelerine sahip tek bir öznitelik içeren bir NSArray'ı nasıl alabilirim? gibi

şey:

NSArray *people; 
NSArray *firstNames = [people getArrayOfAttribute:@"firstName" andType:Person.Class] 

Ben döngü için bir yazma ve adları su dizide doldurmak bir çözüm var ama bunu yapmak istemiyorum.

+0

Sözlük dizisine benzer bir şey var – visakh7

+0

Diziyi neden döngülemek istemiyorsunuz? – jaminguy

+0

Sadece kod satırlarını kaydetmek ve üzerinde çalıştığım işleri zarif bir şekilde uygulamak için diziyi el ile döngülemek istemiyorum. –

cevap

22

NSArray Eğer bu dizideki her girişten size firstName değer dizisi verecektir

NSArray *people ...; 
NSArray *firstName = [people valueForKey:@"firstName"]; 

KVC

kullanmak için bu idare edecek

1

NSMutableArray öğesinde filterUsingPredicate: yöntemine bakın, temel olarak dizinin nasıl filtreleneceğini tanımlayan bir NSPredicate nesnesi oluşturursunuz.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html#//apple_ref/doc/uid/TP40001794-CJBDBHCB

Bu kılavuz genel bilgi vermek ve diziler ile ilgili olarak bir bölüm vardır olacaktır.

+0

+1: Bu doğrudur, ancak büyük bir dizi olmadıkça, yalnızca bir döngü kullanmak işe yaramaz ve Öngörüler kullanma zorluğu yaşanmaz. –

+1

Sorusu, diziyi filtrelemeyle ilgili değil, dizideki değerlerin bir anahtarından bir dizi oluşturma hakkında. –

1

Ayrıca blok tabanlı sabit kullanabilirsiniz:

NSArray *people; // assumably has a bunch of people 
NSMutableArray *firstNames = [NSMutableArray array]; 

[people enumerateObjectsUsingBlock: 
^(id obj, NSUInteger idx, BOOL*flag){ 
    // filter however you want... 
    [firstNames addObject:[Person firstName]]; 
}]; 

Bir grup insanınız varsa, hızlı ve verimli bir avantajdır ...

+0

Serin. KVC'nin bunu yapacağını unuttum. Bana hatırlattığın için teşekkürler. (Oy) –