按键对NSDictionary进行排序/分组

时间:2012-11-20 07:09:06

标签: iphone ios nsdictionary

我在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
 ...

任何有用的帮助......

3 个答案:

答案 0 :(得分: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中只做新文件&gt; objective-C类别,并在NSMutableDictionary上添加类别。

答案 1 :(得分: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"]

答案 2 :(得分:0)

默认情况下无法对

NSDictionary进行排序。如果你想要排序的字典,继续并实现你自己的子类(这是你可以为标准容器对象子类化的几个有效原因之一)。