SORU
30 NİSAN 2009, PERŞEMBE


Nasıl özel nesneler ile bir NSMutableArray sıralamak için?

Yapmak istediğim şey çok basit görünüyor, ama web üzerinde herhangi bir cevap bulamıyorum. Nesnelerin NSMutableArray bir ben var, hadi söylüyorlar 'İnsan' nesneler. Kişi tarafından NSMutableArray sıralamak istiyorum.NSDate hangi doğum tarihi.

Bu yöntem ile ilgili bir şey olduğunu düşünüyorum

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(???)];

Java'da bir nesne Karşılaştırılabilir uygulamak, ya da Koleksiyonları kullanmak istiyorsunuz.bir satır içi özel sıralama...nasıl Objective-C bunu yapıyorsun? karşılaştırıcı

CEVAP
30 NİSAN 2009, PERŞEMBE


Yöntem karşılaştırın

Ya bir-yöntem karşılaştırma nesnesi uygulamak için:

- (NSComparisonResult)compare:(Person *)otherObject {
    return [self.birthDate compare:otherObject.birthDate];
}

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];

NSSortDescriptor (daha iyi)

ya da genellikle daha iyi:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate"
                                              ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [drinkDetails sortedArrayUsingDescriptors:sortDescriptors];

Kolayca dizi daha ekleyerek birden çok anahtar göre sıralayabilirsiniz. Özel karşılaştırıcı-yöntemler kullanılarak mümkündür. the documentation bakabilirsiniz.

Blok (parlak!)

Ayrıca iOS 4 Mac OS X 10.6 beri bir blok ile sıralama imkanı var:

NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *first = [(Person*)a birthDate];
    NSDate *second = [(Person*)b birthDate];
    return [first compare:second];
}];

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • mist64

    mist64

    30 Mayıs 2006
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010