keysSortedByValueUsingComparator не дает правильно упорядоченного массива
У меня есть словарь, ключи которого состоят из NSNumber
s. Я использую keysSortedByValueUsingComparator
следующим образом:
NSArray *sortedKeys = [self.platformDict keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [(NSNumber*)obj2 compare:(NSNumber*)obj1]; }];
Однако вот результат:
- Подсчет allKeys из NSDictionary возвращает EXC_BAD_ACCESS
- Массив для словаря в Objective C
- преобразование объекта NSDictionary в объект NSData и наоборот
- Не все ключи работают при преобразовании строки JSON в NSDictionary
- Слабый объект в NSDictionary?
(lldb) po sortedKeys (NSArray *) $1 = 0x0704bd20 <__NSArrayI 0x704bd20>( 100000, 250000, 1000000, 500000, 3000000, 2000000, 5000000, 10000000 )
Это не по порядку. Это ошибка с реализацией метода или есть еще одна проблема?
- Хотите получить ключевое слово в NSDictionary?
- sortUsingComparator в NSDictionary в NSMutableArray с несколькими объектамиKeys
- Как создать классы классов (NSObject) автоматически из json-словаря?
- статический NSMutableDictionary
- Хранение NSManagedObject в словаре (NSDictionary)
- Получить значения из NSDictionary
- Как проверить значения NSDictionary, nil в iPhone
- Как сохранить несколько значений для одного и того же ключа в NSDictionary, учитывая NSArray объектов JSON?
3 Solutions collect form web for “keysSortedByValueUsingComparator не дает правильно упорядоченного массива”
Возможно, вы не понимаете, что keysSortedByValue:...
метод keysSortedByValue:...
Он не сортирует ключи (для этого вы просто сортируете массив, возвращаемый allKeys
), вместо этого он сортирует значения, а затем применяет их порядок к ключам.
Итак, скажем, у вас есть следующий словарь:
{"Orange": 1, "Apple": 3, "Peach": 2}
Результатом будет:
"Orange", "Peach", "Apple"
потому что это соответствует упорядоченному порядку значений (1, 2, 3).
Вы можете просто использовать sortedArrayUsingSelector:
NSArray *sortedArray = [[self.PlatformDict allKeys] sortedArrayUsingSelector:@selector(compare:)]
Замените внутреннюю часть блока следующим. Это скажет вам, является ли это проблемой с методом сравнения или чем-то еще.
if ([obj1 integerValue] > [obj2 integerValue]) { return (NSComparisonResult)NSOrderedDescending; } if ([obj1 integerValue] < [obj2 integerValue]) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame;