IOS сортировка NSMutableArray для числового поля - PullRequest
2 голосов
/ 30 октября 2011

Я надеюсь, что есть кто-то снаружи, который может помочь мне с этим:

У меня есть несортированный массив словарей, которые имеют поле STRING (Km) внутри, которое содержит числа (например, 12,0; 1, 2; 6,4).Если я сделаю обычную сортировку, массив будет отсортирован таким образом: 1,2 12,0 6,4

Но он должен быть отсортирован таким образом: 1,2 6,4 12,0

У кого-нибудь есть пример кода, как это сделать?Я с нетерпением жду ответа.

Спасибо и с уважением Marco

Отредактируйте мой код для дальнейшего понимания:

NSMutableArray *tempArray = [[NSArray alloc] init];
self.Digger = tempArray;
[tempArray release];

self.Digger = [self.Diggers objectForKey:@"Rows"];

NSSortDescriptor * sort = [[[NSSortDescriptor alloc] initWithKey:@"KM" ascending:true] autorelease]; [self.Digger sortUsingDescriptors:[NSArray arrayWithObject:sort]];
self.Digger = sort;

Но это дает мне следующую ошибку вжурнал: - [NSSortDescriptor count]: нераспознанный селектор отправлен на экземпляр

Ответы [ 2 ]

3 голосов
/ 30 октября 2011

Лучше всего помещать числа в словарь как NSNumbers, а не как строки. Это позволяет избежать двух проблем:


1 Локализация, если десятичные числа, 1,2 против 1,2, которые будут работать по-разному в зависимости от местонахождения пользователя в мире.
2. Естественный порядок сортировки чисел - это то, что нужно.

NSArray *a = [NSArray arrayWithObjects:
              [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:12.0] forKey:@"Km"],
              [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat: 1.2] forKey:@"Km"],
              [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat: 6.4] forKey:@"Km"],
              nil];

NSSortDescriptor * sort = [[[NSSortDescriptor alloc] initWithKey:@"Km" ascending:true] autorelease];
NSArray *sa = [a sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
NSLog(@"sa: %@", sa);

Вывод NSLog:

2011-10-30 10:08:58.791 TestNoARC[86602:f803] sa: (
                                                   {
                                                       Km = "1.2";
                                                   },
                                                   {
                                                       Km = "6.4";
                                                   },
                                                   {
                                                       Km = 12;
                                                   }
                                                   )
0 голосов
/ 30 октября 2011
// assume toBeSorted is your array of dictionaries and the key for the int values is @"myInt"
NSSortDescriptor *sort = [[[NSSortDescriptor alloc] initWithKey:@"myInt" ascending:YES] autorelease];
[toBeSorted sortUsingDescriptors:[NSArray arrayWithObject:sort]];

Это приблизит вас к тому месту, где вы хотите.Если вы всегда используете неотрицательные числа, вы можете проверить, соответствует ли первый объект вашему значению 0, и переместить его в конец массива.

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