1

私は以下のようなNSDictionaryにデータを持っています:

Value : Football, Key: SPORT 
Value : Cricket, Key: SPORT 
Value : Fastrack, Key: PRODUCT/SERVICE 
Value : Audi USA, Key: CARS 
Value : BMW, Key: CARS 
Value : Facebook, Key: PRODUCT/SERVICE 
Value : TED, Key: WEBSITE 
Value : National Geographic, Key: MEDIA/NEWS/PUBLISHING 
Value : MyWebProduct, Key: WEBSITE 

キーによる値のグループ化が必要です。この場合に何をする必要があるか、またはこれを実装するための別の適切なアイデア。結果を次のように表示したい:

 SPORT : Football, Cricket
 CARS  : Audi, BMW
 ...

かなりの助け...

4

3 に答える 3

1

NSMutableDictionary のカテゴリとして、これはうまくいきますか:

- (void)setObject:(id)object inArrayForKey:(id <NSCopying>)key
{
    id current = [self objectForKey:key];
    if (!current || ![current isKindOfClass:[NSArray class]]) {
        [self setObject:@[object] forKey:key];
    } else {
        [self setObject:[(NSArray *)current arrayByAddingObject:object] forKey:key];
    }
}

基本的に、キーに関連付けられた配列にアイテムを追加するクリーンなインターフェイスが得られます。必要に応じて、複数の項目がある場合にのみ配列にすることを選択できます。

カテゴリの追加に慣れていない場合は、既存のクラスにメソッドを追加できます。Xcode では、新しいファイル > Objective-C カテゴリを実行し、カテゴリを に追加しますNSMutableDictionary

于 2012-11-20T07:36:16.063 に答える
1

複数のオブジェクトが同じキーの下にグループ化されているため、配列のディクショナリはデータを格納するのに適した構造になります。

NSMutableDictionary *dict = [ [ NSMutableDictionary alloc ] init ];
NSArray *myItems = [ [ NSArray alloc ] initWithObjects:@"item one", @"item two", nil ];
[ dict setObject:myItems forKey:@"group of items" ];

次に、次を使用してグループにアクセスできます

[dict objectForKey:@"group of items"]
于 2012-11-20T08:00:29.180 に答える
0

NSDictionaryデフォルトではソートできません。ソートされた辞書が必要な場合は、独自のサブクラスを実装してください (これは、標準のコンテナー オブジェクトをサブクラス化できる数少ない正当な理由の 1 つです)。

于 2012-11-20T07:15:59.217 に答える