我首先尝试按值排序NSMutableDictionary,然后按键排序。我按以下代码使用值排序:
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
[dict setObject:[NSNumber numberWithInt:5] forKey:@"eblk"];
[dict setObject:[NSNumber numberWithInt:2] forKey:@"dstl"];
[dict setObject:[NSNumber numberWithInt:4] forKey:@"cast"];
[dict setObject:[NSNumber numberWithInt:4] forKey:@"breb"];
[dict setObject:[NSNumber numberWithInt:5] forKey:@"apts"];
NSArray *sortedKeys = [dict keysSortedByValueUsingComparator: ^(id obj1, id obj2)
{
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
然后我想基于键再次排序,所以我最终得到了一个像这样的键数组:
sortedKeys:dict中的对应值
“apts”:5
“eblk”:5
“breb”:4
“cast”:4
“dstl”:2
我有第一种关于价值工作的方法,我只是不确定如何开始基于密钥的二级排序。
我尝试先按键然后按值排序,但这不起作用。
任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
你要做的是两个关键的排序。对于任何n键排序,您按顺序比较键,如果当前对不相等则返回结果,否则移动到下一对键并重复。
两个键的大纲草图:
使用两键排序对该数组进行排序:
代码草图:
NSArray *allKeys = [dict allKeys];
NSArray *sortedKeys = [allKeys sortedArrayUsingComparator:^(id obj1, id obj2)
{
NSInteger value1 = [[dict objectForKey:obj1] integerValue];
NSInteger value2 = [[dict objectForKey:obj2] integerValue];
if (value1 < value2)
return (NSComparisonResult)NSOrderedDescending;
if (value1 > value2)
return (NSComparisonResult)NSOrderedAscending;
// values are equal, compare keys...
return [obj1 compare:obj2];
}];