使用数字作为键值对NSDictionary进行排序

时间:2015-03-25 00:48:52

标签: ios objective-c sorting nsmutablearray nsmutabledictionary

我有一个NSMutableDictionary mutableArrays作为对象;和键值的数字。

我想对dictionary进行排序。

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

NSLog(@"%@", sortedDict);

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

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

[__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有值。