2013-07-29 2 views
2

Поэтому у меня есть массив около 180 словарей, Есть 5 объектов в каждом словаре (3 строки и 2 NSNumbers)Сортировка массива словарей по номеру

Я пытаюсь разобраться каждый словарь одним из его свойств, это отлично работает для строк, но когда дело доходит до числа, которое оно неправильно сортирует.

-(void) sortArrayBy:(int)sortingNumber { 

    switch (sortingNumber) { 
      case 0: 
       NSLog(@"sorting by atomicnumber"); 
       [self.elementsArray sortUsingDescriptors:[NSArray arrayWithObjects: 
// When sorting this comes back the same each time but not in the correct order 
       [NSSortDescriptor sortDescriptorWithKey:@"ATOMIC NUMBER" ascending:YES], nil]]; 
       break; 
      case 1: 
       NSLog(@"sorting by name"); 
       [self.elementsArray sortUsingDescriptors:[NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:@"ELEMENT NAME" ascending:YES], nil]]; 
       break; 
      case 2: 
       NSLog(@"sorting by symbol"); 
       [self.elementsArray sortUsingDescriptors:[NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:@"CHEMICAL SYMBOL" ascending:YES], nil]]; 
       break; 
      case 3: 
       NSLog(@"sorting by mass"); 
// When sorting this comes back the same each time but not in the correct order 
       [self.elementsArray sortUsingDescriptors:[NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:@"ATOMIC MASS" ascending:YES], nil]]; 
       break; 

      default: 
       break; 
     } 
+0

Care для уточнения «последовательных, но не правильно ", пожалуйста? Например, «1, 20, 3» является «конституированным * и * правильным» для определенных приложений. – usr2564301

+0

Не могли бы вы привести пример «последовательной, но неправильной» сортировки? Покажите нам подпоследовательность после сортировки и укажите элементы вне порядка. – dasblinkenlight

+0

Я имею в виду, что каждый раз, когда я сортирую его, он возвращается одинаково, но порядок неправильный. – flux

ответ

4

Ok, так что я понял, проблему, она разбирала первый номер не весь номер по какой-то причине, поэтому я использую этот код:

 NSSortDescriptor *sortDescriptor = [NSSortDescriptor 

sortDescriptorWithKey:@"ATOMIC MASS" ascending:YES comparator:^(id obj1, id obj2) { 
       return [obj1 compare:obj2 options:NSNumericSearch]; 
      }]; 

      [self.elementsArray sortUsingDescriptors:[NSArray arrayWithObjects: sortDescriptor, nil]]; 
+0

Он сортировал числа «в алфавитном порядке», что означает, что 100 будут сортировать до 2. –

+0

То есть * точно *, что мой комментарий. Краткий примерный список «плохо отсортированных» данных мог бы сразу показать его. – usr2564301

Смежные вопросы