以数字为键值对 NSDictornary 进行排序

Sort NSDictornary with numbers as the key value

我有 NSMutableDictionarymutableArrays 作为对象;和键值的数字。

我想对 dictionary.

进行排序
NSArray *sortedDict = [[NSArray alloc] init];
sortedDict = [self.myDict keysSortedByValuesUsingSelector:@selector(compare:)];

NSLog(@"%@", sortedDict);

当我 运行 应用程序时,它崩溃并出现以下错误:

'-[__NSArrayM compare:]: unrecognized selector sent to instance 0x7f9202f2ce50

我做错了什么?

错误消息强烈提示出了什么问题:

[__NSArrayM compare:]: unrecognized selector sent to instance 0x7f9202f2ce50

它告诉您有人试图在一个数组(准确地说是一个可变数组)上调用 compare: 方法。您的字典有 NSNumber 键和值数组,因此已尝试比较值,而不是键!

这很有道理:方法名称告诉您它将比较值,而不是键:

keysSortedByValuesUsingSelector
            ^^^^^^

如果您想按键对值进行排序,检索所有键,对它们进行排序,然后按键的排序顺序检索相应的值:

NSArray *sortedKeys = [myDict.allKeys sortedArrayUsingSelector:@selector(compare:)];
NSMutableArray *sortedVals = [dict objectsForKeys:sortedKeys notFoundMarker:nil];

此时你有两个数组,它们之间一一对应:sortedKeys 有键,sortedVals 有值。