Сортировка NSDictionary, спуск. Как отправить параметры с помощью опции `compare: options:` selector?

Я пытаюсь сортировать NSDictionary.

Из документов Apple я вижу, что вы можете использовать keysSortedByValueUsingSelector :

 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:63], @"Mathematics", [NSNumber numberWithInt:72], @"English", [NSNumber numberWithInt:55], @"History", [NSNumber numberWithInt:49], @"Geography", nil]; NSArray *sortedKeysArray = [dict keysSortedByValueUsingSelector:@selector(compare:)]; 

который дает:

 // sortedKeysArray contains: Geography, History, Mathematics, English 

но я хочу:

 // sortedKeysArray contains: English, Mathematics, History, Geography 

Я прочитал, что вы можете использовать compare:options: и NSStringCompareOptions чтобы изменить сравнение для сравнения в другом направлении.

Однако я не понимаю, как вы отправляете compare:options: с опцией в селекторе.

Я хочу сделать что-то вроде этого:

 NSArray *sortedKeysArray = [dict keysSortedByValueUsingSelector:@selector(compare:options:NSOrderDescending)]; 

Как переключить порядок сравнения?

Связано: https://discussions.apple.com/thread/3411089?start=0&tstart=0

2 Solutions collect form web for “Сортировка NSDictionary, спуск. Как отправить параметры с помощью опции `compare: options:` selector?”

Вариант 1: используйте компаратор для вызова -compare: в обратном порядке: (Спасибо Dan Shelly!)

 NSArray *blockSortedKeys = [dict keysSortedByValueUsingComparator: ^(id obj1, id obj2) { // Switching the order of the operands reverses the sort direction return [objc2 compare:obj1]; }]; 

Просто отмените нисходящие и восходящие операторы возврата, и вы должны получить именно то, что хотите.

Вариант 2: измените массив, который у вас есть:

См. Как я могу изменить NSArray в Objective-C?

Я использую :

  NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO]; self. sortedKeys = [[self.keyedInventoryItems allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortOrder]]; 
  • performSelector ARC warning
  • Удаленный класс падает сообщение об ошибке неизвестно>: 0: ошибка: нет такого файла или каталога:
  • Динамическое изменение контроллера rootview для контроллера навигации
  • Номер профиля инициализации iOS в Xcode
  • Отладочное приложение с iOS 4.0 Simulator на iOS 5 SDK
  • Xcode не может экспортировать корпоративное приложение
  • -temp-caseinsensitive-rename в Bundle Identifier
  • Заменить / переместить UITableViewCell, но отменить
  • Инструмент VM tracker пуст
  • Swift 3.0 CloudKit fetchDatabaseChangesCompletionBlock Ошибка
  • Выключите звук в iPhone Simulator
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.