sorting一个NSMutableDictionary
我有一个NSMutableDictionary
将NSString
映射到NSString
(尽pipe值是NSStrings
,它们实际上只是整数)。
例如考虑下面的映射,
"dog" --> "4" "cat" --> "3" "turtle" --> "6"
我想结束字典sorting前十位的值按降序排列。 有人可以告诉我这个代码吗? 也许有一个键arrays和另一个值的数组。 不过,我不介意。 我只是想让它高效。
谢谢!
获取值的数组,sorting该数组,然后获取与该值相对应的键。
您可以通过以下方式获取值:
NSArray* values = [myDict allValues]; NSArray* sortedValues = [values sortedArrayUsingSelector:@selector(comparator)];
但是,如果集合如您在示例中所示(我的意思是,您可以从关键字中推断出该值),则始终可以对关键字进行sorting,而不是对这些值进行调整。
使用:
NSArray* sortedKeys = [myDict keysSortedByValueUsingSelector:@selector(comparator)];
比较器是一个消息select器,它被发送到您要订购的对象。
如果你想要命令string,那么你应该使用一个NSString比较器。 NSString比较器是ie:caseInsensitiveCompare或localizedCaseInsensitiveCompare :.
如果这些都不适用于您,您可以调用您自己的比较器function
[values sortedArrayUsingFunction:comparatorFunction context:nil]
正在比较函数 (来自AppleDocumentation )
NSInteger intSort(id num1, id num2, void *context) { int v1 = [num1 intValue]; int v2 = [num2 intValue]; if (v1 < v2) return NSOrderedAscending; else if (v1 > v2) return NSOrderedDescending; else return NSOrderedSame; }
最简单的方法是:
NSArray *sortedValues = [[yourDictionary allValues] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; NSMutableDictionary *orderedDictionary=[[NSMutableDictionary alloc]init]; for(NSString *valor in sortedValues){ for(NSString *clave in [yourDictionary allKeys]){ if ([valor isEqualToString:[yourDictionary valueForKey:clave]]) { [orderedDictionary setValue:valor forKey:clave]; } } }
对键进行sorting并使用它来填充具有以下值的数组:
NSArray *keys = [dict allKeys]; NSArray *sKeys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; NSMutableArray *sValues = [[[NSMutableArray alloc] init] autorelease]; for(id k in sKeys) { id val = [dict objectForKey:k]; [sValues addObject:val]; }
使用这个方法:
- (NSArray *)sortKeysByIntValue:(NSDictionary *)dictionary { NSArray *sortedKeys = [dictionary keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) { int v1 = [obj1 intValue]; int v2 = [obj2 intValue]; if (v1 < v2) return NSOrderedAscending; else if (v1 > v2) return NSOrderedDescending; else return NSOrderedSame; }]; return sortedKeys; }
调用它,然后创build一个新的字典与按值sorting的键:
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: @"4", @"dog", @"3", @"cat", @"6", @"turtle", nil]; NSArray *sortedKeys = [self sortKeysByIntValue:dictionary]; NSMutableDictionary *sortedDictionary = [[NSMutableDictionary alloc] init]; for (NSString *key in sortedKeys){ [sortedDictionary setObject:dictionary[key] forKey:key]; }
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES]; [unsortedArray sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; recentSortedArray = [stories copy];
如果你想按照'name'这样的例子按升序对数据进行sorting,那么这可能对你有帮助。
arrayAnimalList = [{'name'= Dog,'animal_id'= 001},{'name'= Rat,'animal_id'= 002},{'name'= Cat,'animal_id'= 003}];
这是一个帮助你获得sorting数组的代码
//here you have to pass key for which you want to sort data NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor]; // here you will get sorted array in 'sortedArray' NSMutableArray * sortedArray = [[arrayAnimalList sortedArrayUsingDescriptors:sortDescriptors] mutableCopy];