Как я могу отсортировать NSArray по NSSortDiscriptor? - PullRequest
1 голос
/ 29 июля 2010

Я новичок в разработке для iPhone. Мне нужна ваша помощь в сортировке NSArray.

в этом коде я присваиваю значения MyData. это переменная NSArray.

NSMutableArray *MyArray=[NSMutableArray array];

[MyArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:314564454],@"Population", @"Mumbai",@"Name", [NSNumber numberWithInt:415452],@"Area",nil]];

[MyArray addObject:[NSDictionary dictionaryWithObjectsAndKeys[NSNumber numberWithInt:454154412],@"Population", @"Chennai",@"Name", [NSNumber numberWithInt:324544],@"Area",nil]];

[MyArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:874544541],@"Population", @"Kolkatta",@"Name", [NSNumber numberWithInt:554445],@"Area",nil]];

[MyArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:412541245],@"Population", @"Delhi",@"Name", [NSNumber numberWithInt:345475],@"Area",nil]];

self.MyData = [NSArray arrayWithArray:MyArray];

Теперь мне нужны топ-3 города с самой высокой информацией о населении.

Итак, я написал следующий код.,

NSSortDescriptor *sorter = [[[NSSortDescriptor alloc] initWithKey:@"Population" ascending:NO] autorelease]; 
NSArray *sorted = [self.MyData sortedArrayUsingDescriptors: 
    [NSArray arrayWithObject:sorter]];   

NSRange range = NSMakeRange(0,3); 
return [sorted subarrayWithRange:range];

Но это не работает. Тот же код работает, если я заменяю следующее

NSSortDescriptor *sorter = [[[NSSortDescriptor alloc] initWithKey:@"Population" ascending:NO] autorelease]; 

с

NSSortDescriptor *sorter = [[[NSSortDescriptor alloc] initWithKey:@"Name" ascending:NO] autorelease]; 

Это работает .. Потому что имя это строка Пожалуйста, помогите мне Как я могу отсортировать этот массив с числовым значением.

Заранее спасибо.

1 Ответ

1 голос
/ 29 июля 2010

Быстрый запуск вашего кода приводит к следующему выводу, который мне подходит:

2010-07-29 16:32:59.774 test[93035:207] (
    {
    Area = 554445;
    Name = Kolkatta;
    Population = 874544541;
},
    {
    Area = 324544;
    Name = Chennai;
    Population = 454154412;
},
    {
    Area = 345475;
    Name = Delhi;
    Population = 412541245;
}
)

Я только что заменил ваш возврат на: NSLog(@"%@", [sorted subarrayWithRange:range]);

Приветствия ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...