2012-11-20 47 views
1

我有数据的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 
... 

可观任何帮助......

+0

组,你为什么不使用阵列来存储对象? – Chintan

回答

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"] 
0

NSDictionary不能默认排序。如果你想要排序的字典,继续并实现你自己的子类(这是你可以继承一个标准容器对象的少数有效理由之一)。

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上添加类别。