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默认无法排序。如果您想要排序字典,请继续并实现您自己的子类(这是您可以对标准容器对象进行子类化的少数有效原因之一)。

于 2012-11-20T07:15:59.217 回答