Сортировка 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]]; 
  • Как заменить пробелы на + в Xcode
  • Как я могу экспортировать простую фальсифицированную модель Maya для использования в Scenekit?
  • Как автоматически преобразовать код ручного сохранения-выпуска в ARC?
  • Как оживить увеличивающееся число в UILabel
  • Разница в часах между двумя NSDate
  • Parse Crash Reporting: не понимать файлы символов по адресу:
  • iOS: аудио отсутствует в экспортированном видео
  • Элементы UITabbar не отображаются до щелчка после обновления до Xcode 7
  • передача проекта в исходное управление в Xcode
  • Могу ли я получить доступ к каталогу xcassets в файловой системе?
  • Схема пользовательских URL-адресов iOS XCode
  • Interesting Posts

    Заголовок UINavigationBar усекается при использовании пользовательского шрифта

    touchsMoved вызывается одним нажатием на iPhone 6s и далее

    iOS 10 push-уведомления – как работает функция willPresentNotification и didReceiveNotificationResponse?

    Выход пользователя из песочницы Apple перед производством

    Используйте аналитику google firebase с расширением действия iOS

    Adobe AIR Mobile / OAuth2.0

    Бесконечное текстовое изображение с автопрокруткой в ​​ios

    Проблема автозапуска просмотра

    Авторезизация UIView

    Блокировка успешных отказов от AFNetworking в рамках метода

    Как получить близлежащее городское или государственное название геоинформации в воде в ios?

    UILable numberoflines и размер шрифта автоматически устанавливаются во время увеличения времени

    Где приложение Swift iOS начинает свою жизнь?

    supportedInterfaceOrientationsForWindow не вызывается в iOS 9 AppDelegate

    iOS + Autolayout: метка UITableViewCell + ширина поля текста с вращением

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.