0

我有一个 NSDictionary,它的键是一个国家,一个对象是一系列城市:

United States
    New York
    Portland
    Austin
    San Francisco

India
    New Delhi

Belgium
    Antwerp
    Brussels

我想从这本字典创建一个字典,如下所示:

United States
    4

Belgium 
    2

India 
    1

如此从最大的key到最小的key排序,新的key就是原字典中key的个数。这可能吗?什么是最有效的方法?

我得到的最远的是使用

NSComparator sorter = ^NSComparisonResult(id a, id b)
{
    NSArray* a1 = a;
    NSArray* a2 = b;
    if([a1 count] > [a2 count]) return NSOrderedAscending; 
    if([a1 count] < [a2 count]) return NSOrderedDescending; 
    return NSOrderedSame;
}

NSArray* ordered = [dictionary keysSortedByValueUsingComparator:sorter];

但是我只有一个有序数组,而不是附加到该数组的值。

提前致谢!

4

3 回答 3

1

您可以对密钥执行以下操作:

NSArray *sortKeys = [[dictionary allKeys] sortedArrayUsingSelector: @selector(compare:)];
NSMutableArray *sortedValues = [NSMutableArray array];
for (NSString *key in sortKeys) {
    [sortedValues addObject: [dictionary objectForKey: key]];
}

而对于价值:

 NSArray *sortedKeys = [dictionary keysSortedByValueUsingSelector: @selector(compare:)];
于 2013-07-16T07:57:21.723 回答
1

您需要创建一个具有countryNamenumberOfCities成员的新类。完成此操作后,您可以创建这些对象的数组并对它们进行排序。

例如,自定义对象可能有一个类似这样的头文件:

@interface Country : NSObject

@property (nonatomic, strong) NSString *countryName;
@property (nonatomic) NSUInteger numberOfCities;

@end
于 2013-07-16T07:41:51.010 回答
0

你不能排序 NSDictionary 它是一个无序的集合。您可以构建一个表示。你已经完成了工作。你只需要一个数组来表示它。排序后的数组可以保存字典中每个键的键路径。

于 2013-07-16T08:03:52.000 回答