0

国であるキーと都市の配列であるオブジェクトを持つ NSDictionary があります。

United States
    New York
    Portland
    Austin
    San Francisco

India
    New Delhi

Belgium
    Antwerp
    Brussels

この辞書から、次のような辞書を作成したいと思います。

United States
    4

Belgium 
    2

India 
    1

したがって、キーの最大数からキーの最小数にソートされ、新しいキーは元の辞書のキーの数です。これは可能ですか?最も効率的な方法は何ですか?

私が得た最も遠いのは、

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 に答える