我有一本字典,我想根据内部字典中的键对其进行排序。超级字典中的每个键都有一个字典作为值。作为一个例子来说明我在说什么,这里是一个超级字典,分别为每个键提供内部字典。
{
key1 = {count = 2},
key2 = {count = 1}
}
因此,计数键必须是用于排序的键。现在我只知道如何排序数组,我之前没有遇到排序字典。任何帮助将不胜感激。
答案 0 :(得分:1)
从字典中获取数组&排序
NSArray* values = [myDict allValues];
NSArray* sortedValues = [values sortedArrayUsingSelector:@selector(comparator)];
另一种方法来制作NSSortDescriptor
keyDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"count" ascending:YES] autorelease];
sortDescriptors = [NSArray arrayWithObject:keyDescriptor];
sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
我从Sort Descriptor Programming Topics提取代码。此外,Key-Value Coding开始发挥作用,sortedArrayUsingDescriptors:
会向valueForKey:
中的每个元素发送myArray
,然后使用标准比较器对返回的值进行排序。
答案 1 :(得分:1)
这是一种方式:
NSDictionary * dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:[NSNumber numberWithInt:2], @"count", nil];
NSDictionary * dict2 = [[NSDictionary alloc]initWithObjectsAndKeys:[NSNumber numberWithInt:3], @"count", nil];
NSArray * arrayOfDictionaries = [[NSArray alloc]initWithObjects:dict1, dict2, nil];
NSArray * sortedArray = [arrayOfDictionaries sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * obj1, NSDictionary * obj2) {
// are points equal?
if ([obj1[@"count"] intValue] != [obj2[@"count"] intValue]) {
// points not equal, compare points
if ([obj1[@"count"] intValue] > [obj2[@"count"] intValue])
return (NSComparisonResult)NSOrderedAscending;
else
return (NSComparisonResult)NSOrderedDescending;
}
else {
return (NSComparisonResult)NSOrderedSame;
}
}];
让我知道它是怎么回事!
答案 2 :(得分:-1)
好的,只是添加其他人发布的内容(谢谢!)我也找到了我自己的解决方案,如下所示:
NSArray *keysByFrequency = [object keysSortedByValueUsingComparator:^NSComparisonResult(NSDictionary* obj1, NSDictionary* obj2) {
return [obj1[@"count"] compare:obj2[@"count"]];
}];
NSMutableArray *tags = [[NSMutableArray alloc] init];
for (int i = keysByFrequency.count-1; i >= 0; i--) {
[tags addObject:@{@"tag" : keysByFrequency[i], @"count" : object[keysByFrequency[i]][@"count"], @"type" : object[keysByFrequency[i]][@"type"]}];
}