sorting一个NSMutableDictionary

我有一个NSMutableDictionaryNSString映射到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];